libpq作为静态库的LNK2005

LNK2005 with libpq as static library

本文关键字:LNK2005 静态 libpq      更新时间:2023-10-16

我正在编写一个应用程序,通过静态库链接所有第三方代码(包括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。使用/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

在将项目转换为/MDd时有问题后,我决定进入源代码。

<your_path>postgresql-9.2.4srcportwin32error.c ->注释掉,或者#if 0将函数_dosmaperr注释掉。

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

执行grep -R _dosmaperr ./只显示了这一个方法;但是include/port/win32.hinclude/pg_config_os.h都有它作为外部变量

对我的头脑来说有点晚了,所以现在已经足够好了!