【发布时间】:2016-05-14 10:01:17
【问题描述】:
我正在尝试使用 g++ 编译器生成一个 c++ 库。我的库有另一个 C 库作为依赖项,我已经编译它以获得 .so 文件。
我有以下结构:
src:
include/linux:
libcustom.a
libcustom.la
libcustom.so
libcustom.so.0
libcustom.so.0.0.0
现在,当我拥有我的 cpp 类的所有 .o 文件,并且我想链接库时,我执行以下命令:
g++ -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o mylibrary.so File1.o File2.o File3.o -L./include/linux -lc++ -lutil -lm -lcustom -Wl,-rpath='$ORIGIN/include/linux' -L/usr/lib/R/lib -lR
但它给我带来了错误:
libcustom.so.0: cannot open shared object file: No such file or directory
我正在从src 目录执行命令。
我知道编辑LD_LIBRARY_PATH 可以修复它,但是有人可以使用我的库而不需要配置任何东西,所以我尝试使用 c++ 的 -rpath 标志来做到这一点。
知道如何解决它,或者错误的原因吗?
【问题讨论】:
-
您使用了相对路径
-Wl,-rpath=./include/linux,Linux 中的ld加载程序无法识别该路径。请改用绝对路径。有关使用相对路径的正确方法,请转到 stackoverflow.com/a/4018559/6238076