build - 无法打开共享对象文件

我正在尝试编译此处找到的项目之一 USB-I2C/SPI/GPIO 接口(interface)适配器。

我下载了 i2c_bridge-0.0.1-rc2.tgz 包。我安装了 libusb 并且似乎进展顺利,没有任何问题。我进入 i2c_bridge-0.0.1-rc2/ 目录并制作。编译。我进入 i2c_bridge-0.0.1-rc2/i2c 文件夹并制作。它编译并给了我./i2c。但是,当我运行它时,它说 error while loading shared libraries: libi2cbrdg.so: cannot open shared object file: No such file or directory

i2c_bridge-0.0.1-rc2/i2c 中的makefile 的库目录为../libi2cbrdg.so 位于此目录中 (i2c_bridge-0.0.1-rc2)。我还将文件复制到 /usr/local/libi2c_bridge-0.0.1-rc2/目录的一个ls

i2c        i2cbrdg.d  i2cbrdg.o  libi2cbrdg.a   Makefile  tests
i2cbrdg.c  i2cbrdg.h  INSTALL    libi2cbrdg.so  README    u2c4all.sh

(那个i2c是一个目录)

如果我 sudo ./i2c,它仍然会给我带来问题。

我必须去掉所有 makefile 中的 -Werror-noWdecrepated (拼写?)选项才能让它们编译,但这不应该影响这一点应该吗?

它还需要什么才能找到 .so 文件?如果有人可以帮助我找出问题所在,我将不胜感激。如果需要更多信息,我可以发布。

最佳答案

你必须区分查找 so的在编译时和运行时。 -L您在编译时给出的标志与在运行时本地化库无关。这是通过库中嵌入的一些变量和一些路径来完成的。

解决此问题的最佳热修复方法通常是将 LD_LIBRARY_PATH 设置为带有 .so 的目录。文件,例如:

 $ LD_LIBRARY_PATH=.. ./i2c

要获得长期解决方案,您需要通过 rpath 仔细查看整个 LD 系统和 runpath , 或使用 libtool (它为您的便携解决了这些问题)。

将文件复制到 /usr/local/lib通常是不够的,因为 ld缓存可用的库,所以需要重新运行ldconfig (以 root 身份)将库复制到 /usr/local/lib 后.

https://stackoverflow.com/questions/8039562/

相关文章:

makefile - cmake和并行构建与 "make -jN"

.net - 有没有更好的方法将 native dll 复制到 bin 文件夹?

php - 在 ubuntu 上构建 php5.3.8,得到错误 : configure: erro

xcode - 如何将编译源中的文件从一个目标复制并粘贴到另一个目标?

objective-c - 显示应用的构建日期

c - C语言的sublime text 2构建系统

build - 如何在 VSTS/VSO Build vNext 中创建 Web 部署包?

android - 指示 Android Gradle 脚本删除未对齐的 apk 并清理 Artif

javascript - 通过 grunt 任务更新 json 文件中的文件引用

android - 使用-sdk :minSdkVersion 15 cannot be small