LNK2005,libpq作为静态库

时间:2013-04-27 20:06:40

标签: c++ visual-studio-2012 libpq

我正在编写一个通过静态库链接所有第三方代码的应用程序(包括tinyxml2,sqlite3,openssl和libpq);每当我尝试链接到libpqd.lib时,一切都工作正常 - 使用了9.1.9和9.2.4来源 - 我得到了:

1>LIBCMTD.lib(dosmap.obj) : error LNK2005: __dosmaperr already defined in libpqd.lib(win32error.obj)

这是唯一的错误,到目前为止我的搜索没有结果。请注意,我在所有库中使用多线程调试运行时库/MTd,默认情况下postgresql没有;我已手动修补win32.mak以使用/MTd/MT代替之前无法配置的/MDd/MD。这解决了一些先前的链接器错误,但不认为它与最后一个错误相关,因为它之前存在。

我通过以下方式编译libpq:

nmake /f win32.mak DEBUG=1

并通过以下方式链接到它:

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

库目录是在项目中配置的,库被复制到这个文件夹中,所以我知道它正在被使用。

这通常是一个容易解决的错误,但我不确定在哪里看!

在postgresql网站上确实存在一个关于此问题的线程,但似乎没有得到解决:http://www.postgresql.org/message-id/39E6FC4547C24F9884435E23698B11DC@HIRO57887DE653

1 个答案:

答案 0 :(得分:2)

即使将项目转换为/ MDd也遇到问题后,我决定进入源代码。

<your_path>\postgresql-9.2.4\src\port\win32error.c - &gt;注释掉,或#if 0函数_dosmaperr

生成库并且应用程序运行正常。

执行grep -R _dosmaperr ./只显示了这一种方法;但include/port/win32.hinclude/pg_config_os.h都将其作为外部人员。

我的头脑有点迟到能够做出正确的头尾,现在已经足够好了!