[linux] ld cannot find an existing library
As just formulated by grepsedawk, the answer lies in the
-l option of
ld. If you look at the man page of this command, you can either do:
g++ -l:libmagic.so.1 [...]
g++ -lmagic [...], if you have a symlink named libmagic.so in your libs path
I am attempting to link an application with g++ on this Debian lenny system. ld is complaining it cannot find specified libraries. The specific example here is ImageMagick, but I am having similar problems with a few other libraries too.
I am calling the linker with:
g++ -w (..lots of .o files/include directories/etc..) \ -L/usr/lib -lmagic
/usr/bin/ld: cannot find -lmagic
However, libmagic exists:
$ locate libmagic.so /usr/lib/libmagic.so.1 /usr/lib/libmagic.so.1.0.0 $ ls -all /usr/lib/libmagic.so.1* lrwxrwxrwx 1 root root 17 2008-12-01 03:52 /usr/lib/libmagic.so.1 -> libmagic.so.1.0.0 -rwxrwxrwx 1 root root 84664 2008-09-09 00:05 /usr/lib/libmagic.so.1.0.0 $ ldd /usr/lib/libmagic.so.1.0.0 linux-gate.so.1 => (0xb7f85000) libz.so.1 => /usr/lib/libz.so.1 (0xb7f51000) libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7df6000) /lib/ld-linux.so.2 (0xb7f86000) $ sudo ldconfig -v | grep "libmagic" libmagic.so.1 -> libmagic.so.1.0.0
How do I diagnose this problem further, and what could be wrong? Am I doing something completely stupid?
As mentioned above the linker is looking for
libmagic.so, but you only have
To solve this problem just perform an update cache.
To verify you can run:
$ ldconfig -p | grep libmagic
In Ubuntu, you can install
libtool which resolves the libraries automatically.
$ sudo apt-get install libtool
This resolved a problem with
ltdl for me, which had been installed as
libltdl.so.7 and wasn't found as simply
-lltdl in the make.