Opened 7 years ago
Closed 7 years ago
#1433 closed defect (worksforme)
Static egg linkling seems to be broken
Reported by: | felix winkelmann | Owned by: | |
---|---|---|---|
Priority: | critical | Milestone: | 5.0 |
Component: | core libraries | Version: | 5.0.0 |
Keywords: | Cc: | sjamaan | |
Estimated difficulty: | medium |
Description
Compiling this with srfi-1
egg installed attempts to load a shared library and fails
(import srfi-1)
With `csc -static x.scm -kv -debug 2:
'/home/felix/chicken/chicken-5-master/bin/chicken' 'x.scm' -output-file 'x.c' -static -verbose -debug 2 -emit-link-file x.link Note: re-importing already imported identifier: assoc Note: re-importing already imported identifier: member [canonicalized] (##core#callunit library) (##core#callunit eval) (##core#callunit expand) (##core#callunit srfi-1) (##core#undefined) (##core#undefined) (##core#undefined) (scheme#eval '(import-for-syntax scheme chicken.base chicken.syntax)) (scheme#eval '(import scheme chicken.base chicken.syntax)) (##core#undefined) (scheme#newline) ((chicken.base#implicit-exit-handler)) 'gcc' 'x.c' -o 'x.o' -c -fno-strict-aliasing -fwrapv -DHAVE_CHICKEN_CONFIG_H -DC_ENABLE_PTABLES -g -Wall -Wno-unused -I/home/felix/chicken/chicken-5-master/include/chicken 'gcc' 'x.o' '/home/felix/chicken/chicken-5-master/lib/chicken/9/srfi-1.o' -o 'x' -L/home/felix/chicken/chicken-5-master/lib -Wl,-R'/home/felix/chicken/chicken-5-master/lib' /home/felix/chicken/chicken-5-master/lib/libchicken.a -lm -ldl [debug] application startup... [debug] heap resized to 1048576 bytes [debug] stack bottom is 0x7fff624cffd0. [debug] entering toplevel... [debug] entering library... [debug] entering build-version... [debug] entering eval... [debug] entering chicken-syntax... [debug] entering expand... [debug] entering internal... [debug] entering modules... [debug] entering srfi-1... ; loading /home/felix/chicken/chicken-5-master/lib/chicken/9/chicken.import.so ... Error: (load) during expansion of (import-syntax ...) - unable to load compiled module - cannot load compiled code dynamically - this is a statically linked executable: "/home/felix/chicken/chicken-5-master/lib/chicken/9/chicken.import.so" Call history: <syntax> (import scheme chicken.base chicken.syntax) <syntax> (##core#begin (##core#require library scheme#) (##core#require library chicken.base#) (##core#requir... <syntax> (##core#require library scheme#) <syntax> (##sys#load-library (##core#quote library)) <syntax> (##core#quote library) <syntax> (##core#require library chicken.base#) <syntax> (##sys#load-library (##core#quote library)) <syntax> (##core#quote library) <syntax> (##core#begin (##core#require expand chicken.syntax#)) <syntax> (##core#require expand chicken.syntax#) <syntax> (##sys#load-library (##core#quote expand)) <syntax> (##core#quote expand) <eval> (##sys#load-library (##core#quote library)) <eval> (##sys#load-library (##core#quote library)) <eval> (##sys#load-library (##core#quote expand)) <syntax> (import-syntax (except scheme member assoc) chicken) <-- ␄
Change History (9)
comment:2 follow-up: 3 Changed 7 years ago by
Hey Felix, I can't reproduce this. What revision of CHICKEN and the srfi-1 egg is this?
The output I see is this, which is what's expected, I think:
$ /nowhere/bin/csc -static x.scm -kv -debug 2 && ./x -:rd '/nowhere/bin/chicken' 'x.scm' -output-file 'x.c' -static -verbose -debug 2 -emit-link-file x.link Note: re-importing already imported identifier: assoc Note: re-importing already imported identifier: member [canonicalized] (##core#callunit library) (##core#callunit eval) (##core#callunit expand) (##core#callunit srfi-1) (##core#undefined) (##core#undefined) (##core#undefined) (##core#undefined) ((chicken.base#implicit-exit-handler)) 'gcc' 'x.c' -o 'x.o' -c -fno-strict-aliasing -fwrapv -DHAVE_CHICKEN_CONFIG_H -DC_ENABLE_PTABLES -Os -fomit-frame-pointer -I/nowhere/include/chicken 'gcc' 'x.o' '/nowhere/lib/chicken/9/srfi-1.o' -o 'x' -L/nowhere/lib -Wl,-R'/nowhere/lib' /nowhere/lib/libchicken.a -lm -ldl [debug] application startup... [debug] heap resized to 1048576 bytes [debug] stack bottom is 0x7fff1c6ddf60. [debug] entering toplevel... [debug] entering library... [debug] entering build-version... [debug] entering eval... [debug] entering chicken-syntax... [debug] entering expand... [debug] entering internal... [debug] entering modules... [debug] resizing mutation stack from 8k to 16k ... [debug] entering srfi-1... chicken.base#implicit-exit-handler [debug] forcing finalizers... [debug] application terminated normally
Versions:
$ /nowhere/bin/chicken -version (c) 2008-2017, The CHICKEN Team (c) 2000-2007, Felix L. Winkelmann Version 5.0.0 (rev 57ec6d2b) linux-unix-gnu-x86-64 [ 64bit dload ptables ]
$ git show -q # in the chicken-5-eggs repo commit 36c190d79b415a91ecbbea3cb95f946ae837dd5e Author: felix <felix@call-with-current-continuation.org> Date: Mon Dec 25 15:00:29 2017 +0100 Added big-chicken
comment:3 Changed 7 years ago by
Replying to evhan:
Hey Felix, I can't reproduce this. What revision of CHICKEN and the srfi-1 egg is this?
Using the same srfi-1 version and master HEAD (with and without Peter's last 3 patches). But I'll try again.
comment:4 Changed 7 years ago by
I tried once more, with clean install locations and this seems indeed only happen with the recent three patches by sjamaan:
0001-Remove-obsolete-deprecated-stuff.patch
0002-Drop-weird-macro-workarounds-in-favour-of-chicken.in.patch
0003-Include-definitions-of-default-modules-into-modules..patch
comment:5 follow-up: 6 Changed 7 years ago by
I built a clean version of CHICKEN 5 with and without the patches, and didn't get the error. Maybe you were using a stale copy of srfi-1?
If you're using the "local" repository you will need to uninstall and git clean -df before retrying, I think.
comment:6 follow-up: 7 Changed 7 years ago by
Replying to sjamaan:
I built a clean version of CHICKEN 5 with and without the patches, and didn't get the error. Maybe you were using a stale copy of srfi-1?
If you're using the "local" repository you will need to uninstall and git clean -df before retrying, I think.
Did you purge the egg install cache? And can you give me the complete genealogy of the csc you are finally using? (including intermediate steps of producing (boot-)chickens)
comment:7 Changed 7 years ago by
Replying to felix:
Replying to sjamaan:
I built a clean version of CHICKEN 5 with and without the patches, and didn't get the error. Maybe you were using a stale copy of srfi-1?
If you're using the "local" repository you will need to uninstall and git clean -df before retrying, I think.
Did you purge the egg install cache? And can you give me the complete genealogy of the csc you are finally using? (including intermediate steps of producing (boot-)chickens)
From the top (on a clean Linux system without CHICKEN 5):
First install pre4:
$ rm -rf ~/.chicken-install.cache $ wget https://code.call-cc.org/dev-snapshots/2017/12/14/chicken-5.0.0pre4.tar.gz $ tar xzf chicken-5.0.0pre4.tar.gz $ cd chicken-5.0.0pre4 $ make PLATFORM=linux PREFIX=/home/peter/chickens/5.0.0pre4 install
Next, apply patches and build a boot-chicken, then use that to build the actual CHICKEN:
$ cd ../chicken-core $ git clean -df $ git am < ~/0001-Remove-obsolete-deprecated-stuff.patch $ git am < ~/0002-Drop-weird-macro-workarounds-in-favour-of-chicken.in.patch $ git am < ~/0003-Include-definitions-of-default-modules-into-modules..patch $ make PLATFORM=linux CHICKEN=/home/peter/chickens/5.0.0pre4/bin/chicken boot-chicken $ make PLATFORM=linux CHICKEN=./chicken-boot PREFIX=/home/peter/chickens/chicken-5 install
Now, run the test program:
$ cd /tmp $ ~/chickens/chicken-5/bin/chicken-install srfi-1 $ echo '(import srfi-1)' > test.scm $ ~/chickens/chicken-5/bin/csc -static test.scm -kv -debug 2
Let's check it's statically linked (no libchicken in there):
$ ldd test linux-vdso.so.1 (0x00007fffa6ff1000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9507f4a000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9507d46000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f95079a7000) /lib64/ld-linux-x86-64.so.2 (0x00007f9508686000)
OK, great. Now let's run it:
$ ./test -:rd [debug] application startup... [debug] heap resized to 1048576 bytes [debug] stack bottom is 0x7ffdf3e09100. [debug] entering toplevel... [debug] entering library... [debug] entering build-version... [debug] entering eval... [debug] entering chicken-syntax... [debug] entering expand... [debug] entering internal... [debug] entering modules... [debug] entering srfi-1... scheme#eval scheme#eval chicken.base#implicit-exit-handler [debug] forcing finalizers... [debug] application terminated normally
This gave me no errors.
comment:8 Changed 7 years ago by
Oh, BTW, I had revision 57ec6d2b4dc6110db0b24f48cae2cfa0e29fa48a
of master
checked out in my chicken-core
git repo.
comment:9 Changed 7 years ago by
Resolution: | → worksforme |
---|---|
Status: | new → closed |
I seem to have conflated several issues.
Actually, the command is:
csc -static x.scm -kv -debug 2 && ./x -:rd