libpq函数的未定义引用

时间:2010-11-21 00:26:11

标签: postgresql linker makefile g++

我有两个项目,一个是使用libpq头和可执行文件的库,它链接到我的库和libpq,但不管我如何放入makefile,它只是没有链接libpq和aways返回我是一个未定义的参考错误。它链接我的lib确定。

g++  -o MYAPP  main.o -L../Libs -lpq -lMYLIB

libpq.a和libmylib.a都在Libs目录中 我使用nm检查函数,他们在那里,我将-lpq更改为-lpq_并且编译器抱怨缺少的lib,所以它找到并且理论上是链接,但是找不到引用?

这真的让我烦恼,这可能是什么?

(我的英语不太好,对不起)

谢谢,
乔纳森

1 个答案:

答案 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需要的其他库。