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 亀田馬志 <masashi.kam...@gmail.com> 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 <kristianl...@gmail.com>:
>
>>
>> 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 亀田馬志 <masashi.kam...@gmail.com> 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>
>>> <#m_-3771291668364076337_m_2995656887587357561_m_-6378871799878235639_m_-3841790857946966358_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>>>
>>> 2020年8月13日(木) 6:39 Kristian Lein-Mathisen <kristianl...@gmail.com>:
>>>
>>>>
>>>> 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
>>>>   [2]:
>>>> http://wiki.call-cc.org/man/5/Deployment#distributing-compiled-c-files
>>>>
>>>>
>>>> On Mon, Aug 10, 2020, 21:28 亀田馬志 <masashi.kam...@gmail.com> 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>
>>>>> <#m_-3771291668364076337_m_2995656887587357561_m_-6378871799878235639_m_-3841790857946966358_m_692582290224770852_m_6593347720704535955_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>>>>>
>>>>

Reply via email to