我使用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
How to See the Contents of Windows library (*.lib)
所以差别是
PQconnectdb and _PQconnectdb
。是下划线使链接器找不到真正的符号PQconnectdb吗?
为什么编译器在符号中添加下划线?
我怎样才能解决这个问题?
最佳答案
使链接器找不到真正符号的下划线
PQconnectdb?为什么编译器在符号中添加下划线?
这是__cdecl
约定,对于x86(32位)仍然有效,但对于64位构建已被废弃。
由于dumpbin libpq.lib /exports
不显示下划线,这意味着该库来自64位构建。
要生成32位程序,请用32 bits PostgreSQL zip archive中的lib
目录替换库。内容将与当前的生成配置(看起来是32位)兼容。
另一方面,要生成64位程序,请将Qt Creator配置为使用64位“工具包”(例如,在Qt Creator 3中的Projects
选项卡中,请参阅Add Kit
面板中的Build & Run
)和您已经拥有的64位PostgreSQL库。
关于qt - 链接到libpq失败,并带有未解析的符号_PQconnectdb,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20901218/