c++ - 链接到我的主目录中的共享对象文件

标签 c++ linux gcc gdb ld

我有一个共享对象文件,我想链接它。该文件当前位于我的主目录中 - 它位于 /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

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

出现“未找到可加载部分...”错误消息的可能或可能原因有哪些?这是否表明运行时环境无法找到某些库? .so 文件是使用 -fPIC-shared 标志编译的。

最佳答案

What are some possible or likely causes of the "no loadable sections found ..." error message?

这是一个 GDB 警告,您可以放心地忽略。

Does this indicate the runtime environment is unable to find certain libraries?

相反,它表明您的程序启动正常,运行到 test.cpp 的第 13 行(早已过了初始化),然后崩溃。

不幸的是,您没有显示第 13 行是什么样子,因此无法为您提供更多帮助。

关于c++ - 链接到我的主目录中的共享对象文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30308847/

相关文章:

C++ lambda 后跟 () 与没有 () 的 lambda

c++ - Windows 7 中的 OLEUnInitialize()

linux - 读取输入数字并将其重定向到文件中的列

linux - 尝试为 Cloudformation 创建/更新 bash 脚本时出现 AlreadyExistsException 错误

c++ - 为什么 iostream 定义了一个 abs 函数,我该如何停止它?

c++ - 有条件地禁用复制构造函数

c++ - 使用递归与迭代在链表末尾插入

linux - 如何清除 Docker 任务历史记录

c++ - make 说 : `No rule to make target` when I try to compile a Qt application for android platfrom

c - 根据内存位置的特定值定义值