我正在编写一个通过静态库链接所有第三方代码的应用程序(包括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
答案 0 :(得分:2)
即使将项目转换为/ MDd也遇到问题后,我决定进入源代码。
<your_path>\postgresql-9.2.4\src\port\win32error.c
- &gt;注释掉,或#if 0
函数_dosmaperr
。
生成库并且应用程序运行正常。
执行grep -R _dosmaperr ./
只显示了这一种方法;但include/port/win32.h
和include/pg_config_os.h
都将其作为外部人员。
我的头脑有点迟到能够做出正确的头尾,现在已经足够好了!