1

我使用 Qt5、msvc2010、windows7 64 位。

我想测试我是否可以链接 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

如何查看 Windows 库 (*.lib) 的内容

所以区别是PQconnectdb and _PQconnectdb

是那个使链接器找不到真正的符号 PQconnectdb 的下划线吗?为什么编译器在符号后面加下划线?

我怎么解决这个问题?

4

1 回答 1

3

是那个使链接器找不到真正的符号 PQconnectdb 的下划线吗?为什么编译器在符号后面加下划线?

这是 __cdecl对 x86(32 位)仍然有效但在 64 位构建中已过时的约定。

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

要生成 32 位程序,请将您的库替换为32 位 PostgreSQL zip 存档lib中的目录。内容将与您当前看起来是 32 位的构建配置兼容。

另一方面,要生成 64 位程序,请将 Qt Creator 配置为使用 64 位“工具包”(例如,在 Qt Creator 3 中,Projects选项卡,Add KitBuild & Run面板中查看)和您已有的 64 位 PostgreSQL 库。

于 2014-01-04T00:19:24.323 回答