我使用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? 为什么编译器在符号中添加下划线?
我该如何解决这个问题?
答案 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库。