在Visual Studio 2013中使用libpq,编译为DLL

时间:2014-09-01 19:33:08

标签: c++ visual-studio dll libpq

我正在尝试使用Visual Studios 2013创建.dll。该项目包含libpq功能。

其他stackoverflow帖子和我在互联网上找到的其他来源,我(据我所知)正确添加了postgres lib并将目录包含在项目中。但是,当我去构建项目时,它会返回一些"未解析的外部符号"错误。

我的路径是C:\Program Files\PostresSQL\9.3\...,所以我在附加资料库/包含目录字段中用引号括起来。我在项目中添加了libpq-fe.h标题文件...我只是不确定我做错了什么。

另外注意,我可以使用带有-I,-L和-lpq标志的g ++从命令行编译测试程序,但是我不确定如何从命令行编译为.dll (加上它增加了我不想处理的复杂性。)

这些是我得到的具体错误:

1>sql_arma.obj : error LNK2001: unresolved external symbol _PQconnectdb
1>sql_arma.obj : error LNK2001: unresolved external symbol _PQstatus
1>sql_arma.obj : error LNK2001: unresolved external symbol _PQerrorMessage
1>sql_arma.obj : error LNK2001: unresolved external symbol _PQfinish
1>C:\Users\tills13\documents\visual studio 2013\Projects\sql_arma\Release\sql_arma.dll : fatal error LNK1120: 4 unresolved externals

如下所示,我在项目的源文件中包含#pragma comment(lib, "libpq.lib"),我仍然收到这些错误。

3 个答案:

答案 0 :(得分:2)

我通过设置这些项目属性成功编译了sample program

  • <pgsql install path>\include\lib添加到 VC ++目录 - &gt;包含 - &gt;图书馆,相应地
  • libpq.lib添加到链接器 - &gt;输入 - &gt;其他依赖项

这是引用第三方库的标准方法。只是他们建议使用环境变量作为他们的“基础目录”,以避免在VCS下修补项目。

  • 为了能够从VS运行应用程序(无论是否有调试),我还在 Debugging-&gt; Environment 中指定了PATH=%PATH%;<pgsql install path>\bin,因为此目录不在{{ 1}}在我的系统上。

答案 1 :(得分:0)

将postgres lib目录添加到项目中是不够的,您还必须添加 参考libpq.lib。只需将此行添加到您的一个源.cpp文件中:

#pragma comment(lib, "libpq.lib")

Marco A。所述,库必须与程序位数(32或64位)匹配:如果构建32位DLL(称为Win32),则必须使用32位库;如果是64位(x64) - 64位库。

答案 2 :(得分:0)

我也面临同样的问题。然后我意识到我正在将我的应用程序构建为32位。我将应用程序的目标更改为x64并成功编译

enter image description here