g++找不到.so文件
g++ not find .so files
我正在尝试使用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标志来实现这一点。
知道我该如何修复它吗?或者错误的原因是什么?
您得到的错误消息似乎来自运行时加载程序ld.so
,而不是链接器ld
(我知道名称令人困惑)。您必须区分在链接时和运行时查找so。在链接时提供的-L标志与在运行时本地化库无关。
您的rpath=./include/linux
值不正确,因为dot未被ld
识别为相对路径。应该像一样给出相对搜索路径
-Wl,-rpath='$ORIGIN/include/linux'
其中$ORIGIN
表示可执行文件(而非mylibrary.so
)所在的文件夹。请确保使用单引号,而不是双引号,因为字符串$ORIGIN
应该直接传递给链接器,并硬编码到可执行文件中。
提供更多详细信息
如何使用相对路径从共享库链接到共享库
ld:在共享库(递归)中使用-rpath,$ORIGIN
相关文章:
- 如何使用ndk-build.cmd构建Android.so文件
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 如何从构建 libgpio.so 的生成文件构建libgpio.a
- 用于构建 cuda .so 文件(共享库)的生成文件
- 无法从 SO 文件调用 SO 文件的函数 - C++生成文件
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 C++ 的 .so 文件中包含库
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- 为什么C++可执行文件在与较新的libstdc++.so链接时运行得更快?
- Google Colab 看不到 .so 文件
- ./main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或
- 如何在 Linux 中从 .so 文件打开可执行文件?
- 如何在makefile中包含tensorflow c ++".so"文件?
- 缺少 .h 文件,尽管从库文件夹链接了 .so 文件
- 如何在 CMake 超级生成中查找 dll/so 文件
- 如何用.so文件linux打包所有需要的库
- 如何调试visual studio 2017生成的C++代码.android中的SO文件和其他第三方库
- 如何使用 gnu c++ 程序获取共享对象文件(.so 文件)的体系结构
- EMF文件(.so)调试,符号找不到VTable错误
- 如何将c++库作为共享对象文件(.so)加载到Python中?