appears using CHICKEN 5 but extras.c & data-structures.c are CHICKEN 4 modules

> On Aug 15, 2020, at 2:42 AM, Kristian Lein-Mathisen <[email protected]> 
> wrote:
> 
> 
> Hi, 
> 
> I'm glad that helped. But I suppose I should have explained my process, 
> instead of just giving you the end result - which clearly doesn't work once 
> you start adding imports like you have.
> 
> The error messages you're seeing (undefined reference to `C_extras_toplevel') 
> are coming from your C compilier. They mean that your program is using a 
> function which isn't defined anywhere, so we need to find where 
> C_extras_toplevel is defined.
> 
> There are probably a hundred different ways of finding the .c file which 
> defines a function. Here's and one. Install ctags and then run this:
> 
>  ~/o/chicken-5.2.0rc1  ➤ ctags *.c
> # creates a "grepable" file called tags
> 
> ~/o/chicken-5.2.0rc1  ➤ grep C_extras_toplevel tags
> C_extras_toplevel       extras.c        /^void C_ccall 
> C_extras_toplevel(C_word c,C_word *av){$/;"    f   typeref:typename:void 
> C_ccall
> # so it seems we need extras.c too
> 
>  ~/o/chicken-5.2.0rc1  ➤ grep C_data_2dstructures_toplevel tags
> C_data_2dstructures_toplevel    data-structures.c       /^void C_ccall 
> C_data_2dstructures_toplevel(C_word c,C_word *av){$/;"       f       
> typeref:typename:void C_ccall
> # and data-structures.c
> 
>  ~/o/chicken-5.2.0rc1  ➤ gcc -DHAVE_CHICKEN_CONFIG_H hello.c -I . runtime.c 
> library.c eval.c expand.c modules.c internal.c chicken-syntax.c 
> build-version.c extras.c data-structures.c -lm -llog -o hello
> 
> Adding those two files to the gcc command should get your program to compile 
> properly. If not, you can find the missing .c files by grepping `tags`. 
> 
> Hope that helps.
> K.
> 
> On Sat, Aug 15, 2020, 02:57 亀田馬志 <[email protected] 
> <mailto:[email protected]>> wrote:
> Hello.
> 
> >  gcc -DHAVE_CHICKEN_CONFIG_H hello.c -I . runtime.c library.c eval.c 
> > expand.c modules.c internal.c chicken-syntax.c build-version.c -lm -o hello
> 
> Oh, yes. It works! Great! Thank you!
> 
> But......
> 
> I wrote a script like this.
> 
> (import format (chicken io) (chicken string) (chicken process-context))
> 
> (require-extension srfi-13)
> 
> (let ((file-name (car (command-line-arguments))))
>   (with-input-from-file file-name
>     (lambda ()
>       (let loop ((ls0 '()) (c (read-line)))
>         (if (eof-object? c)
>             (for-each (lambda (x)
>                         (format #t
>                                 "時刻:~A秒,北緯:~A度~A分,東経:~A度~A分~%"
>                                 (+ (* (cadar x) 60) (caddar x))
>                                 (string-take (cadr x) 2)
>                                 (string-drop (cadr x) 2)
>                                 (string-take (caddr x) 3)
>                                 (string-drop (caddr x) 3)))
>                       (reverse ls0))
>             (let ((ls1 (string-split c ",")))
>               (if (string=? (car ls1) "$GPGGA")
>                   (loop (cons `(,(map string->number
>                                       (string-chop (list-ref ls1 1) 2))
>                                 ,(list-ref ls1 2)
>                                 ,(list-ref ls1 4)) ls0) (read-line))
>                   (loop ls0 (read-line)))))))))
> 
> Sorry, some Japanese are mixed. But. Anyway.
> I try compiling with your way, and gcc gives me an error like this.
> 
> /usr/bin/ld: /tmp/ccxVWfZy.o: in function `f_223':
> poichan-01-1.c:(.text+0x765): undefined reference to `C_extras_toplevel'
> /usr/bin/ld: /tmp/ccxVWfZy.o: in function `f_226':
> poichan-01-1.c:(.text+0x92d): undefined reference to 
> `C_data_2dstructures_toplevel'
> collect2: error: ld returned 1 exit status
> 
> Hmmmm.... Is there something wrong on the code?
> What are the C_extras_toplevel and C_data_wdstructures_toplevel?
> 
> If I used some libraries from chicken-install, should I use the compiled 
> "scheme to c" file too?
> 
> There must be something more to learn around the Chicken Scheme more.....
> 
> Anyway, you have helped me a lot! Thank you.
> 
> 
> 2020年8月13日(木) 14:56 Kristian Lein-Mathisen <[email protected] 
> <mailto:[email protected]>>:
> 
> Hi,
> 
> I managed to get something working on my termux, maybe that can help you:
> 
> ~/o/chicken-5.2.0rc1  ➤
> echo '(print "hello")' > hello.scm           ~/o/chicken-5.2.0rc1  ➤
> ./csc -t hello.scm
>  ~/o/chicken-5.2.0rc1  ➤
> gcc -DHAVE_CHICKEN_CONFIG_H hello.c -I . runtime.c library.c eval.c expand.c 
> modules.c internal.c chicken-syntax.c build-version.c -lm -llog -o hello
>  ~/o/chicken-5.2.0rc1  ➤ ldd hello 
> libm.so                                   
> liblog.so
> libdl.so
> libc.so
>  ~/o/chicken-5.2.0rc1  ➤ ./hello
> hello
> 
> You can ignore -llog unless you're on Android.
> 
> So you don't need buildtag.h. Is there a reason you can't "csc -static 
> hello.scm" or "csc -static -C -static hello.scm" which is a more common 
> use-case?
> 
> Cheers,
> K.
> 
> On Thu, Aug 13, 2020, 03:27 亀田馬志 <[email protected] 
> <mailto:[email protected]>> wrote:
> Thanks for your reply.
> 
> > It seems there is a chicken-bin for U20.04LTS
> 
> Yes, there is BINARY. I mean I could not find a SOURCE CODE package.
> (Usually, you can take source code from the Ubuntu repository if you wished 
> to.)
> 
> 
> > did you try compiling hello.scm to hello.c with that?
> 
> Yes, I did.
> To write a single file with Scheme codes, and to compile to a SINGLE c file, 
> it is a piece of cake.
> 
> > Are you reading the manual for Chicken 5
> 
> Yes, of course. I followed the instructions on it.
> You may see there:
> 
> "Compiled to C, we get hello.c. We need the files chicken.h, 
> chicken-config.h, buildtag.h and runtime.c, which contain the basic runtime 
> system, plus the library files build-version.c, chicken-syntax.c, eval.c, 
> expand.c, internal.c, library.c and modules.c, which contain the same 
> functionality as the library that is linked into plain CHICKEN-compiled 
> applications:"
> 
> However, as you may notice, there is no buildtag.h generated even though you 
> built Chicken Scheme from its source code.
> Therefore, you can not proceed to the rest process using /tmp described next.
> 
> > perhaps the manual is outdated?
> 
> OMBuddha. If what you are saying were right....what should I do!?
> 
> Thanks.
> 
> 
>  
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
>         ウイルス フリー。 www.avast.com 
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
>  
> <x-msg://1/#m_-3771291668364076337_m_2995656887587357561_m_-6378871799878235639_m_-3841790857946966358_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
> 2020年8月13日(木) 6:39 Kristian Lein-Mathisen <[email protected] 
> <mailto:[email protected]>>:
> 
> Hi,
> 
> It seems there is a chicken-bin for U20.04LTS [1], did you try compiling 
> hello.scm to hello.c with that? What is it that you're trying to acheive?
> 
> I don't seem to have any buildtag.h either, perhaps the manual is outdated?
> 
> Are you reading the manual for Chicken 5 [2]?
> 
> K.
>     [1]: https://packages.ubuntu.com/focal/interpreters/chicken-bin 
> <https://packages.ubuntu.com/focal/interpreters/chicken-bin>
>   [2]: http://wiki.call-cc.org/man/5/Deployment#distributing-compiled-c-files 
> <http://wiki.call-cc.org/man/5/Deployment#distributing-compiled-c-files>
> 
> On Mon, Aug 10, 2020, 21:28 亀田馬志 <[email protected] 
> <mailto:[email protected]>> wrote:
> Hello.
> 
> I tried following and obeying the instructions described in Deployment, the 
> manual of Chicken Scheme, in order to cock-a-do-do "Distributing compiled C 
> files", but it did not work well.
> 
> 1. Ubuntu Repository provides no source code of Chicken Scheme
> 
> I'm using Ubuntu 20.04 LTS, currently an OS under the feather, and I could 
> not find the source code of Chicken Scheme in its repository. Neither in 
> Debian? I do not know. 
> Hen_ce, I had to build Chicken Scheme from its source code.
> 
> 2. Where the chick can I find buildtag.h?
> 
> I switched to using Windows 10, and made an environment of Ubuntu with 
> WSL(Windows Subsystem for Linux). There I built a Chicken Scheme from its 
> source, and followed the instructions. BUT. I could not find buildtag.h there 
> even though the manual says "generated by the build process". Did I miss 
> something? Is there any special way to get buildtag.h?
> 
> 3. Anyway tried compiling "Hello World", but getting a bunch of error 
> messages.
> 
> I did not know whether compiling with gcc worked well or not without 
> buildtag.h, but I tried. The result was a bunch of errors, something like 
> this:
> 
> "/usr/bin/ld: /tmp/ccJKB9L5.o: in function `C_modules_toplevel':
> modules.c:(.text+0xad58): undefined reference to `C_chicken_2dsyntax_toplevel'
> collect2: error: ld returned 1 exit status"
> 
> Something related to toplevel stuff did not work well. As egg-spected? Maybe, 
> yes.
> 
> Well, is there any technique of "Distributing compiled C files" outside of 
> the manual, or is there anything I did wrong(especially in the building 
> process)?
> 
> Thanks, 
> 
> 
>  
> 
>  
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
>         ウイルス フリー。 www.avast.com 
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
>  
> <x-msg://1/#m_-3771291668364076337_m_2995656887587357561_m_-6378871799878235639_m_-3841790857946966358_m_692582290224770852_m_6593347720704535955_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

Reply via email to