我正在尝试编译这里找到的一个项目
USB-I2C/SPI/GPIO接口适配器。
我下载了i2c_bridge-0.0.1-rc2.tgz
包。我安装了libusb
,看起来很顺利,没有问题。我进入i2c_bridge-0.0.1-rc2/
目录并生成。这就是汇编。我将移动到i2c_bridge-0.0.1-rc2/i2c
文件夹中并生成。它编译并提供给我。但是,当我运行它时,它会说./i2c
中的makefile将库目录设置为error while loading shared libraries: libi2cbrdg.so: cannot open shared object file: No such file or directory
。i2c_bridge-0.0.1-rc2/i2c
在这个目录中(../
)。我还将文件复制到了libi2cbrdg.so
。i2c_bridge-0.0.1-rc2
目录的/usr/local/lib
是
i2c i2cbrdg.d i2cbrdg.o libi2cbrdg.a Makefile tests
i2cbrdg.c i2cbrdg.h INSTALL libi2cbrdg.so README u2c4all.sh
(这是一个目录)
如果我,它仍然会给我带来问题。
我必须去掉
ls
和i2c_bridge-0.0.1-rc2/
(拼写?)所有makefiles中的选项可以让它们编译,但这不应该影响这一点,应该吗?它还需要什么来查找
i2c
文件?如果有人能帮我找出问题所在,我将不胜感激。如果需要更多信息,我可以发布。 最佳答案
您必须区分在编译时和运行时查找SO。在编译时给出的-l标志与在运行时本地化库无关。这是通过一些变量和库中嵌入的一些路径来完成的。
此问题的最佳修复方法通常是使用.so文件将ld_library_路径设置为目录,例如:
$ LD_LIBRARY_PATH=.. ./i2c
对于一个长期的解决方案,您需要使用rpath和runpath仔细观察整个ld系统,或者使用libtool(它可以方便地为您解决这些问题)。
将文件复制到/usr/local/lib通常是不够的,因为ld缓存可用的库,所以在将库复制到/usr/local/lib之后,需要重新运行ldconfig(作为根)。