2

我正在编写一个通过静态库(包括 tinyxml2、sqlite3、openssl 和 libpq)链接所有 3rd 方代码的应用程序;每当我尝试链接到 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

4

1 回答 1

3

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

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

生成库并且应用程序运行良好。

做一个grep -R _dosmaperr ./只揭示了这一种方法;但是include/port/win32.h两者include/pg_config_os.h都将其作为外部人员。

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

于 2013-04-27T23:35:51.967 回答