Mon 07 Nov 2005 05:04:32 PM UTC, original submission:
By default, when I built guile on my linux box (debian sarge). it uses the "__libc_stack_end" symbol. This symbol is not portable. When I compile and link my program with the guile libraries, and then try to move the binary to a different linux platform (with a different version of GNU libc), the program won't load with the error:
./no-repl: relocation error: ./no-repl: symbol __libc_stack_end, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference
ldd --version shows glic 2.3.2 on one box, 2.3.5 on the other (it also fails between 2.3.2 and 2.3.3)
My solution was to rebuild guile, but remove the line
"#define HAVE_LIBC_STACK_END 1" from config.h before recompiling (after reconfiguring)
After relinking my executeable with this new version of guile, it still failed due to:
ERROR: In procedure primitive-load-path:
ERROR: Unable to find file "ice-9/boot-9.scm" in load path
which meant I had to distribute along with the contents of
<install dir>/share/guile/1.6/
and set up run scripts to configure GUILE_LOAD_PATH before running my executeable.
As __libc_stack_end is a non-portable symbol, I would like to see it not used by default on the guile build. (or not used at all honestly)
Also, it would be nice if there was a way to statically link the file from the share directory. If there already is and I just missed it while browsing the documentation, I apologize, but I was unable to find it.
|