我尝试在Raspbian(Raspberry Pi的Debian变体)下的C程序中使用rrdtools库。链接器一直抱怨找不到rrd库:
tos@pi ~/work/reader $ gcc -o reader -lwiringPi -lrrd *.c
/usr/bin/ld: cannot find -lrrd
collect2: ld returned 1 exit status
图书馆似乎在它应该在的地方:
tos@pi ~/work/reader $ ll /usr/lib/librrd.*
lrwxrwxrwx 1 root root 15 Sep 4 2012 /usr/lib/librrd.so.4 -> librrd.so.4.2.0
-rw-r--r-- 1 root root 327224 Sep 4 2012 /usr/lib/librrd.so.4.2.0
我还链接了wiringPi库,它发现它没有问题:
tos@pi ~/work/reader $ ll /usr/lib/libwiring*
lrwxrwxrwx 1 root root 36 Sep 25 14:50 /usr/lib/libwiringPiDev.so -> /usr/local/lib/libwiringPiDev.so.2.0
lrwxrwxrwx 1 root root 33 Sep 25 14:50 /usr/lib/libwiringPi.so -> /usr/local/lib/libwiringPi.so.2.0
ldconfig-v显示了librrd,并且该库似乎适用于正确的体系结构(arm)。我还缺什么吗?
在/usr/lib文件夹中创建一个软链接,其中包含到已安装库的实际版本的库编号。像
$ ln -s librrd.so.4.2.0 /usr/lib/librrd.so
一般情况下
$ ln -s Library_name.version.so Library_name.so
这个问题是因为链接器会试图通过绝对名称来识别库共享对象文件。如果ld找不到,那么它会抛出这样的错误。