What might cause gcc not to be able to see some libraries that are
in the same directories as other libraries it can see?
For example, these references work:
$ gcc test.c -lc
$ gcc test.c -lcrypt
but these do not:
$ gcc test.c -lcfont
/usr/bin/ld: cannot find -lcfont
collect2: ld returned 1 exit status
$ gcc test.c -lconsole
/usr/bin/ld: cannot find -lconsole
collect2: ld returned 1 exit status
$ gcc test.c -lctutils
/usr/bin/ld: cannot find -lctutils
collect2: ld returned 1 exit status
$ gcc test.c -lcom_err
/usr/bin/ld: cannot find -lcom_err
collect2: ld returned 1 exit status
(The test program is simply "main() {}".)
I can't figure out what the difference is.
ldconfig lists all those libraries:
$ /sbin/ldconfig -p | grep "libc[^56]"
libctutils.so.0 (libc6) => /lib/libctutils.so.0
libcrypt.so.1 (libc6) => /lib/libcrypt.so.1
libcrypt.so (libc6) => /usr/lib/libcrypt.so
libconsole.so.0 (libc6) => /lib/libconsole.so.0
libcom_err.so.2 (libc6) => /lib/libcom_err.so.2
libcfont.so.0 (libc6) => /lib/libcfont.so.0
libc.so.6 (libc6) => /lib/libc.so.6
Directory /lib also contains them all:
bash-2.03$ ls -l /lib | grep "libc[^56]"
-rwxr-xr-x 1 root root 888596 Aug 14 18:11 libc-2.1.3.so
lrwxrwxrwx 1 root root 13 Aug 14 18:11 libc.so.6 ->
libc-2.1.3.so
lrwxrwxrwx 1 root root 17 Aug 14 18:11 libcfont.so.0
-> libcfont.so.0.0.0
-rw-r--r-- 1 root root 12332 Aug 14 18:11
libcfont.so.0.0.0
lrwxrwxrwx 1 root root 17 Aug 14 18:11 libcom_err.so.2
-> libcom_err.so.2.0
-rw-r--r-- 1 root root 5244 Aug 14 18:11
libcom_err.so.2.0
lrwxrwxrwx 1 root root 19 Aug 14 18:11 libconsole.so.0
-> libconsole.so.0.0.0
-rw-r--r-- 1 root root 61224 Aug 14 18:11
libconsole.so.0.0.0
-rw-r--r-- 1 root root 20112 Aug 14 18:11
libcrypt-2.1.3.so
lrwxrwxrwx 1 root root 17 Aug 14 18:11 libcrypt.so.1
-> libcrypt-2.1.3.so
lrwxrwxrwx 1 root root 19 Aug 14 18:11 libctutils.so.0
-> libctutils.so.0.0.0
-rw-r--r-- 1 root root 18252 Aug 14 18:11
libctutils.so.0.0.0
The file command shows seemingly normal results:
bash-2.03$ file /lib/libc*
/lib/libc-2.1.3.so: ELF 32-bit LSB shared object, Intel 80386,
version 1, stripped
/lib/libc.so.6: symbolic link to libc-2.1.3.so
/lib/libcfont.so.0: symbolic link to libcfont.so.0.0.0
/lib/libcfont.so.0.0.0: ELF 32-bit LSB shared object, Intel 80386,
version 1, stripped
/lib/libcom_err.so.2: symbolic link to libcom_err.so.2.0
/lib/libcom_err.so.2.0: ELF 32-bit LSB shared object, Intel 80386,
version 1, stripped
/lib/libconsole.so.0: symbolic link to libconsole.so.0.0.0
/lib/libconsole.so.0.0.0: ELF 32-bit LSB shared object, Intel 80386,
version 1, stripped
/lib/libcrypt-2.1.3.so: ELF 32-bit LSB shared object, Intel 80386,
version 1, stripped
/lib/libcrypt.so.1: symbolic link to libcrypt-2.1.3.so
/lib/libctutils.so.0: symbolic link to libctutils.so.0.0.0
/lib/libctutils.so.0.0.0: ELF 32-bit LSB shared object, Intel 80386,
version 1, stripped
Any ideas?
The only thing I notice is that in the /lib directory listing,
the non-symbolic-link versions of libc and libcrypt have version
numbers before the ".so" part:
... libc-2.1.3.so
... libc.so.6 -> libc-2.1.3.so
... libcrypt-2.1.3.so
... libcrypt.so.1 -> libcrypt-2.1.3.so
while for the other libraries the link name and the file name are
the same past the ".so" part:
... libctutils.so.0 -> libctutils.so.0.0.0
... libctutils.so.0.0.0
...
Could that have any relationship to the problem?
Is there any documentation on exactly how gcc or ld finds libraries?
The manual pages mention a default search mechanism, but never say
exactly what that is or how it works (e.g., in relation to symbolic
links or multiple files with the same prefix).
Thanks,
Daniel
--
Daniel Barclay
[EMAIL PROTECTED]
(Hmm. A little worrisome: http://www.junkbusters.com/cgi-bin/privacy
http://www.anonymizer.com/snoop.cgi )