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

Reply via email to