KDE2 has a habit of creating modules and then linking them into programs. Now this isn't a problem if the modules are named libNAME.la, but if they are named NAME.la then I see build errors on NetBSD/a.out. I've attached a simplified exmaple from each of NetBSD/ELF and NetBSD/a.out. My main question is - should libtool allow this or insist that when linking modules into programs libNAME.la should be used, or - should libtool be fixed to produce the right results for the a.out case Nick -- aka [EMAIL PROTECTED], [EMAIL PROTECTED]
$ echo "#include <stdio.h>\nint main() { printf(\"hello world\\\\n\"); }" > main.c $ $ libtool --mode=compile cc -c main.c mkdir .libs cc -c main.c -fPIC -DPIC -o .libs/main.o cc -c main.c -o main.o >/dev/null 2>&1 $ $ libtool --mode=link cc -o module.la main.lo -avoid-version -module -rpath `pwd`/inst cc -shared .libs/main.o -Wl,-soname -Wl,module.so -o .libs/module.so ar cru .libs/module.a main.o ranlib .libs/module.a creating module.la (cd .libs && rm -f module.la && ln -s ../module.la module.la) $ $ echo "" > dummy.c $ $ cc -c dummy.c $ $ libtool --mode=link cc -o prog dummy.o module.la > cc -o .libs/prog dummy.o ./.libs/module.so -Wl,--rpath -Wl,/tmp/test/inst creating prog $ $ ./prog hello world $ $ libtool --mode=execute ldd prog /tmp/test/.libs/prog: module.so => /tmp/test/./.libs/module.so -lc.12 => /usr/lib/libc.so.12 $ $ libtool --mode=install install module.la `pwd`/inst install .libs/module.so /tmp/test/inst/module.so install .libs/module.lai /tmp/test/inst/module.la install .libs/module.a /tmp/test/inst/module.a ranlib /tmp/test/inst/module.a chmod 644 /tmp/test/inst/module.a ---------------------------------------------------------------------- Libraries have been installed in: /tmp/test/inst If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,--rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- $ $ libtool --mode=install install prog `pwd`/inst install .libs/prog /tmp/test/inst/prog $ $ ldd inst/prog inst/prog: module.so => /tmp/test/inst/module.so -lc.12 => /usr/lib/libc.so.12 $
$ echo "#include <stdio.h>\nint main() { printf(\"hello world\\\\n\"); }" > main.c $ $ libtool --mode=compile cc -c main.c mkdir .libs cc -c main.c -fPIC -DPIC -o .libs/main.o cc -c main.c -o main.o >/dev/null 2>&1 $ $ libtool --mode=link cc -o module.la main.lo -avoid-version -module -rpath `pwd`/inst /usr/bin/ld -Bshareable -o .libs/module.so .libs/main.o ar cru .libs/module.a main.o ranlib .libs/module.a creating module.la (cd .libs && rm -f module.la && ln -s ../module.la module.la) $ $ echo "" > dummy.c $ $ cc -c dummy.c $ $ libtool --mode=link cc -o prog dummy.o module.la cc -o .libs/prog dummy.o -L./.libs -lmodule -R/tmp/test/inst ld: -lmodule: no match collect2: ld returned 1 exit status $ $ cc -o .libs/prog dummy.o `pwd`/.libs/module.so $ $ ldd .libs/prog .libs/prog: ./.libs/module.so (0x40019000) -lc.12 => /usr/lib/libc.so.12.40.2 (0x4002a000) $ $ ./.libs/prog hello world $