我正在尝试编译此处找到的项目之一 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/lib
。 i2c_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 - 如何将编译源中的文件从一个目标复制并粘贴到另一个目标?
build - 如何在 VSTS/VSO Build vNext 中创建 Web 部署包?
android - 指示 Android Gradle 脚本删除未对齐的 apk 并清理 Artif