与我的主目录中的共享对象文件链接

Posted

技术标签:

【中文标题】与我的主目录中的共享对象文件链接【英文标题】:Linking with a shared object file in my home directory 【发布时间】:2015-05-18 16:52:40 【问题描述】:

我有一个想要链接的共享对象文件。该文件当前位于我的主目录中 - 它位于像 /usr/lib 这样的普通库目录中,因为我只是在测试并且没有权限将它部署到 /usr/lib

所以,我尝试编译和链接如下:

g++ test.cpp -o test -L. mylib.so -g3

编译器没有返回错误,但是,当我运行时,我得到了错误:

./test: error while loading shared libraries: mylib.so: cannot open shared object file: No such file or directory

好的,经过一番谷歌搜索后,我意识到问题是我的库运行路径不包括我的主目录,所以我需要在编译时将rpath 选项传递给链接器。好的,那我试试:

 g++ test.cpp -o test -Wl,-rpath,. -L. mylib.so -g3

这编译得很好,但是当我运行程序时它会立即出现段错误。

所以,我使用gdb 来查看发生了什么:

(gdb) run
Starting program: ~/test
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x2aaaaaaab000
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.

回溯不会显示任何有用的信息。有一个堆栈帧:

#0  0x0000000000400808 in main () at test.cpp:13

所以,我确信这可能是我编译和链接方式的问题,但谷歌搜索这个问题并没有找到太多答案。

no loadable sections found ...”错误消息有哪些可能或可能的原因?这是否表明运行时环境无法找到某些库? .so 文件是使用 -fPIC-shared 标志编译的。

【问题讨论】:

“所以,我确信这可能是我编译和链接方式的问题”——恰恰相反。它可能与它无关。发布最少的代码。 【参考方案1】:

“找不到可加载的部分...”错误消息有哪些可能或可能的原因?

这是您可以放心忽略的 GDB 警告。

这是否表示运行时环境无法找到某些库?

相反,它表明你的程序启动良好,并运行到test.cpp 的第13 行(这是很久以前的初始化),然后崩溃。

很遗憾,您没有展示第 13 行的样子,因此无法为您提供更多帮助。

【讨论】:

以上是关于与我的主目录中的共享对象文件链接的主要内容,如果未能解决你的问题,请参考以下文章

Linux 运行时链接器错误

使用 LIBSVM 将我的 svm.cpp 文件与我的 C 程序链接时出错

将共享对象链接到其他共享对象 C++ 项目

静态链接 libtcod

共享主机中的 Laravel 存储链接

各个目录说明