我正在尝试编译这里找到的一个项目
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 directoryi2c_bridge-0.0.1-rc2/i2c在这个目录中(../)。我还将文件复制到了libi2cbrdg.soi2c_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

(这是一个目录)
如果我,它仍然会给我带来问题。
我必须去掉lsi2c_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(作为根)。

08-27 07:05