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

Linking with a shared object file in my home directory

本文关键字:共享 对象 文件 我的 主目录 链接      更新时间:2023-10-16

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

回溯显示不出有用的信息。只有一个stackframe:

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

所以,我敢肯定这可能是我编译和链接的方式有问题,但谷歌搜索这个问题并没有出现太多的答案。

出现" no loadable sections found ... "错误信息的可能原因是什么?这是否表示运行时环境无法找到某些库?.so文件是使用-fPIC-shared标志编译的。

"no loadable sections found…"错误信息的可能原因是什么?

这是一个可以忽略的GDB警告。

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

相反,它表明您的程序启动良好,并运行到test.cpp的第13行(这早于初始化),然后崩溃。

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