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

时间:2015-05-18 16:52:41

标签: c++ linux gcc gdb ld

我有一个我想要链接的共享对象文件。该文件当前位于我的主目录中 - 它的不是位于正常的库目录中,如/usr/lib,因为我只是测试并且没有权限将其部署到{{1} }}

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

/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标记编译的。

1 个答案:

答案 0 :(得分:0)

  

找不到可加载部分的可能或可能原因是什么......"错误消息?

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

  

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

相反,它表示你的程序正常运行,并且运行到test.cpp的第13行(这是很久以前的初始化),然后崩溃。

不幸的是,你没有显示第13行的内容,所以无法帮助你。