2013-04-27 45 views
1

我正在編寫一個應用程序,通過靜態庫(包括tinyxml2,sqlite3,openssl和libpq)鏈接所有第三方代碼;一切工作正常以後,每當我嘗試鏈接到libpqd.lib - 它們使用了9.1.9和9.2.4的來源 - 我越來越:LNK2005與libpq作爲靜態庫

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/[email protected]

回答

2

與它有問題之後,即使轉換項目/ MDD,我決定放棄進入資源。

<your_path>\postgresql-9.2.4\src\port\win32error.c - >註釋掉,或#if 0函數_dosmaperr

庫生成並且應用程序正常運行。

做一個grep -R _dosmaperr ./只揭示了這一個方法;但include/port/win32.hinclude/pg_config_os.h都作爲外部。

對於我來說,做出適當的頭部/尾部有點晚了,現在已經足夠了!

+0

謝謝你的男人!它真的工作得很好嗎?我的意思是修補源 – herolover 2016-09-23 10:50:35