Doing some investigation under Linux, I see that libltdl does the same
wrong things under Linux except that Linux employs some algorithms
which makes doing the wrong things much less expensive than under
Solaris. Linux prunes directories in the search path which were found
to not exist from later searches. Linux also entirely ignores
requests to load libraries which were already loaded. However, Linux
does still try to dlopen() a ".a" archive file.
Here is a strace done under Linux showing only the system calls which
pass file names (strace -e trace=file command). The modules loaded
were "null.la" and "xc.la":
execve("/usr/local/bin/gm", ["gm", "convert", "-size", "1x1", "xc:white",
"null:"], [/* 50 vars */]) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libGraphicsMagick.so.3", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/liblcms.so.1", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/libfreetype.so.6", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/libXext.so.6", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/libSM.so.6", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/libICE.so.6", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/libX11.so.6", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/libbz2.so.1.0", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/libz.so.1", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/libm.so.6", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/libgomp.so.1", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/libpthread.so.0", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/libdl.so.2", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/libc.so.6", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/libXau.so.6", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/libxcb-xlib.so.0", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/libxcb.so.1", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/librt.so.1", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/libXdmcp.so.6", O_RDONLY) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
open("/proc/meminfo", O_RDONLY) = 3
open("/proc/stat", O_RDONLY) = 3
open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3
open("/usr/local/share/GraphicsMagick-1.4/config/modules.mgk", O_RDONLY) = 3
getcwd("/"..., 2052) = 2
access("/usr/local/lib/GraphicsMagick-1.4/modules-Q16/coders/null.la", R_OK) = 0
open("/usr/local/lib/GraphicsMagick-1.4/modules-Q16/coders/null.la", O_RDONLY)
= 3
open("/etc/ld.so.cache", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/tls/x86_64/null.a", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/tls/x86_64", 0x7fffbac4e380) = -1 ENOENT (No such file or directory)
open("/lib/tls/null.a", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/tls", 0x7fffbac4e380) = -1 ENOENT (No such file or directory)
open("/lib/x86_64/null.a", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64", 0x7fffbac4e380) = -1 ENOENT (No such file or directory)
open("/lib/null.a", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/lib/tls/x86_64/null.a", O_RDONLY) = -1 ENOENT (No such file or
directory)
stat("/usr/lib/tls/x86_64", 0x7fffbac4e380) = -1 ENOENT (No such file or
directory)
open("/usr/lib/tls/null.a", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib/tls", 0x7fffbac4e380) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64/null.a", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64", 0x7fffbac4e380) = -1 ENOENT (No such file or directory)
open("/usr/lib/null.a", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib", {st_mode=S_IFDIR|0755, st_size=135168, ...}) = 0
open("/lib/x86_64-linux-gnu/tls/x86_64/null.a", O_RDONLY) = -1 ENOENT (No such
file or directory)
stat("/lib/x86_64-linux-gnu/tls/x86_64", 0x7fffbac4e380) = -1 ENOENT (No such
file or directory)
open("/lib/x86_64-linux-gnu/tls/null.a", O_RDONLY) = -1 ENOENT (No such file or
directory)
stat("/lib/x86_64-linux-gnu/tls", 0x7fffbac4e380) = -1 ENOENT (No such file or
directory)
open("/lib/x86_64-linux-gnu/x86_64/null.a", O_RDONLY) = -1 ENOENT (No such file
or directory)
stat("/lib/x86_64-linux-gnu/x86_64", 0x7fffbac4e380) = -1 ENOENT (No such file
or directory)
open("/lib/x86_64-linux-gnu/null.a", O_RDONLY) = -1 ENOENT (No such file or
directory)
stat("/lib/x86_64-linux-gnu", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/lib/x86_64-linux-gnu/tls/x86_64/null.a", O_RDONLY) = -1 ENOENT (No
such file or directory)
stat("/usr/lib/x86_64-linux-gnu/tls/x86_64", 0x7fffbac4e380) = -1 ENOENT (No
such file or directory)
open("/usr/lib/x86_64-linux-gnu/tls/null.a", O_RDONLY) = -1 ENOENT (No such
file or directory)
stat("/usr/lib/x86_64-linux-gnu/tls", 0x7fffbac4e380) = -1 ENOENT (No such file
or directory)
open("/usr/lib/x86_64-linux-gnu/x86_64/null.a", O_RDONLY) = -1 ENOENT (No such
file or directory)
stat("/usr/lib/x86_64-linux-gnu/x86_64", 0x7fffbac4e380) = -1 ENOENT (No such
file or directory)
open("/usr/lib/x86_64-linux-gnu/null.a", O_RDONLY) = -1 ENOENT (No such file or
directory)
stat("/usr/lib/x86_64-linux-gnu", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/share/locale/locale.alias", O_RDONLY) = 3
open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT
(No such file or directory)
open("/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT
(No such file or directory)
open("/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No
such file or directory)
open("/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT
(No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No
such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such
file or directory)
open("/usr/local/lib/GraphicsMagick-1.4/modules-Q16/coders/null.so", O_RDONLY)
= 3
access("/usr/local/lib/GraphicsMagick-1.4/modules-Q16/coders/xc.la", R_OK) = 0
open("/usr/local/lib/GraphicsMagick-1.4/modules-Q16/coders/xc.la", O_RDONLY) = 3
open("/etc/ld.so.cache", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/xc.a", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/xc.a", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/xc.a", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/usr/lib/x86_64-linux-gnu/xc.a", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/usr/local/lib/GraphicsMagick-1.4/modules-Q16/coders/xc.so", O_RDONLY) = 3
open("/usr/local/share/GraphicsMagick-1.4/config/colors.mgk", O_RDONLY) = 3
Bob
--
Bob Friesenhahn
bfrie...@simple.dallas.tx.us, http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer, http://www.GraphicsMagick.org/
_______________________________________________
http://lists.gnu.org/mailman/listinfo/libtool