链接到libpq失败,未解析的符号_PQconnectdb

时间:2014-01-03 10:12:18

标签: qt postgresql qt-creator libpq

我使用Qt5,msvc2010,windows7 64bit。

我想测试一下我是否可以链接libpq.lib。

http://www.postgresql.org/docs/9.2/static/libpq-example.html

我在QtCreator中构建了上面的例子。

得到

error LNK2019: unresolved external symbol _PQconnectdb in function "_main"

我检查我的libpq.lib使用dumpbin libpq.lib /exports

得到

        1    PQconnectdb
      156    PQconnectdbParams

How to See the Contents of Windows library (*.lib)

所以差异是PQconnectdb and _PQconnectdb

这是否使得链接器无法找到真正的符号PQconnectdb? 为什么编译器在符号中添加下划线?

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

  

该下划线是否使链接器无法找到真实符号   PQconnectdb里?为什么编译器在符号中添加下划线?

这是__cdecl约定,它仍然对x86(32位)有效,但已经过时的64位版本。

由于dumpbin libpq.lib /exports没有显示下划线,这意味着该库来自64位版本。

要生成32位程序,请将库替换为32 bits PostgreSQL zip archive中的lib目录。内容将与您当前的32位编译配置兼容。

另一方面,要生成64位程序,请将Qt Creator配置为使用64位“Kit”(例如,在Qt Creator 3,Projects选项卡中,请参阅Add Kit中的Build & Run 1}} panel)与你已经拥有的64位PostgreSQL库。