【发布时间】:2014-09-01 19:33:07
【问题描述】:
我正在尝试使用 Visual Studios 2013 创建一个 .dll。该项目包含 libpq 功能。
根据我在 Internet 上找到的其他 stackoverflow 帖子和其他来源,我(据我所知)已将 postgres 库和包含目录正确添加到项目中。但是,当我去构建项目时,它会返回一些“未解析的外部符号”错误。
我的路径是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"),但我仍然收到这些错误。
【问题讨论】:
-
为了构建一个依赖于来自另一个 DLL 的符号的 DLL,我认为您应该导出这些符号。也许这可以帮助你更多:[1] msdn.microsoft.com/en-us/library/z4zxe9k8.aspx [2] stackoverflow.com/questions/225432/… [3] msdn.microsoft.com/en-us/library/a90k134d.aspx
-
我正在导出代码中需要的符号。我的问题是来自 libpq 的未定义符号。
-
@hbobenicio 就像我在帖子中所说的那样,我可以使用命令行将其编译为可执行文件,该可执行文件使用相同的库并包含目录即可正常工作
-
您检查过 32/64 位和/或runtime type 吗?
-
@TylerSebastian 你能发布确切的链接器错误吗?这可能有助于我们清楚地理解问题。只是在黑暗中拍摄,您是否链接到正确的运行时?
标签: c++ visual-studio dll libpq