【发布时间】:2016-12-23 14:49:50
【问题描述】:
我在/somepath 有一个SQLite3 的自定义构建,所以/somepath/.libs 包含libsqlite3.so.0.8.6 和指向它的符号链接。我想针对它链接一个程序并假设
g++ -O3 -g -fPIC -I /somepath -I /somepath/src -L /somepath/.libs -lsqlite3 -o myfile.so myfile.cpp
会工作的。它可以编译,但是由于我的代码中的一些问题而出现分段错误,并且在尝试调试时遇到了类似于LD_PRELOAD not working with my program 和Setting my lib for LD_PRELOAD makes some processes produce loader errors 的问题:我可以运行LD_PRELOAD=myfile.so /somepath/sqlite3 ...,但在 GDB 下我得到了符号查找错误和LD_DEBUG=all LD_PRELOAD=myfile.so gdc -c core /somepath/sqlite3 ... 显示符号正在/usr/lib/x86_64-linux-gnu/libsqlite3.so.0 而不是/somepath/libsqlite3.so.0 中查找,并且不出所料地缺少自定义构建中添加的函数的符号。我该如何解决这个问题并调试我的代码?
【问题讨论】:
-
标题与问题相矛盾。您是在询问如何使 gdb 加载您的库或 gcc 与您的库链接吗?
-
@SergeyA 我认为是 gcc 没有链接到我想要的库,但我可能会误解。