[Ecls-list] Two-level dependency "segmentation violation" - problem found, where/how to fix?
William Robinson
airbaggins at gmail.com
Sun Jan 27 16:27:17 UTC 2008
William Robinson wrote:
> Hi,
>
> I have run into a problem, while trying to create a .fas out of an
> ASDF system with a dependency. I've attached some super-simple code to
> hopefully demonstrate this. I have a "program.lisp" loading a
> "helper.fas", which is built from an ASDF package, which, in turn,
> depends on "library.asd". The build process appears to statically link
> "library" when it builds "helper.fas", but when I try to load the .fas
> (from either a REPL or program.lisp), there is a "Segmentation
> violation".
Hi again, I've been digging deeper into this and have found that the
problem is here:
>
> ;;; Note: Invoking external command:
> ;;; gcc -o
> "/home/bill/programming/test-lisp/ecl-two-level-deps/helper.fas"
> -L"/usr/local/lib/"
> "/home/bill/programming/test-lisp/ecl-two-level-deps/ECLINITxJowE3.o"
> "/home/bill/programming/test-lisp/ecl-two-level-deps/liblibrary.a"
> "/home/bill/programming/test-lisp/ecl-two-level-deps/helper.o"
> -Wl,--rpath,/usr/local/lib/ -shared -lecl -lpthread -ldl -lm -lgmp
When the liblibrary.a is included, it throws away the unused symbols, as
the crash is because it cannot find init_lib_LIBRARY in the dynamic table.
However, if you put the linker flags (for GCC anyway) --whole-archive
before the mention of liblibrary.a (and --no-whole-archive after, as you
get an ungodly mess of multiply defined symbols), the resulting .fas is
then loadable, and it runs correctly.
I am digging around in the asdf and cmp packages code now to find a
suitable place to drop this in, if it's even possible.
Ciao.
bill
More information about the ecl-devel
mailing list