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