我有两个项目,一个是使用libpq头和可执行文件的库,它链接到我的库和libpq,但不管我如何放入makefile,它只是没有链接libpq和aways返回我是一个未定义的参考错误。它链接我的lib确定。
g++ -o MYAPP main.o -L../Libs -lpq -lMYLIB
libpq.a和libmylib.a都在Libs目录中 我使用nm检查函数,他们在那里,我将-lpq更改为-lpq_并且编译器抱怨缺少的lib,所以它找到并且理论上是链接,但是找不到引用?
这真的让我烦恼,这可能是什么?
(我的英语不太好,对不起)
谢谢,
乔纳森
答案 0 :(得分:3)
我快速检查了一些我飞来飞去的postgre标题,当用C ++编译器编译时,它们似乎没有在extern "C"
中自我包装。是否有可能通过在extern "C" { ... }
块中包含postgre标头的include语句来解决您的问题?
编辑。
我认为问题是:libpq.a and libmylib.a
。我一开始在你的原帖中忽略了这一点,对不起噪音。当您向gcc提供-lpq
时,它会尝试动态链接。 除非你给了一个带-L 和的库目录,那里只有静态版本的库。静态库无法记录它们需要引入哪些其他库。此外,对于静态库,规范顺序很重要。需要在它们之前列出依赖于其他库的库。通过apt-get安装,您可以安装共享库,正确记录他们需要链接的其他内容(选中ldd /usr/lib/libpq.so
)。因此,在您之前的尝试中,您可能只需要使用-lpq
反转-lMYLIB
并列出libpq需要的其他库。