我有一个涉及
的项目mylib.so
test_mylib
当我尝试在gdb
上运行test_mylib
时,会打印:
"test_mylib": not in executable format: File format not recognized
当我直接使用真实程序(.libs/test_mylib
)时,它仍会抱怨:
.libs/test_mylib: can't load library 'libhello.so.0'
如何运行gdb来调试我的程序?
答案 0 :(得分:11)
这是我几天前遇到的问题,而且还没有关于SO的通用答案。只有特殊情况。以下是我在此页面上找到的答案:http://www.gnu.org/software/libtool/manual/html_node/Debugging-executables.html
在安装程序之前,系统不知道在哪里查找共享对象。它们通常位于源文件夹的.libs
子目录中。
Libtool生成一个便利脚本,允许在实际安装完成之前进行调试(谁想在之前安装错误的软件,在之后调试?)
幸运的是,生成的脚本为此提供了一个帮助:
libtool --mode=execute gdb test_mylib
答案 1 :(得分:4)
libtool文档推荐的解决方案是在开发过程中使用静态链接,正如我所描述的那样:Build libtool application with static linking to local components
为此,请使用./configure
脚本的--disable-shared
选项。
例如:
./configure --enable-debug --disable-shared
现在生成的可执行文件是直接可执行的二进制文件,而不是libtool脚本。
这样可以大大减少构建时间。