2

静的ライブラリ (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 にはデフォルトではありません。以前は構成できなかった/MTdandの代わりに andを使用するように、手動で win32.mak にパッチを適用しました。これにより、以前のリンカー エラーがいくつか解決されましたが、以前から存在していたため、この最後のエラーに関連しているとは思われません。/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 ./この1つの方法のみが明らかになりました。しかしinclude/port/win32.hinclude/pg_config_os.h両方ともexternとして持っていました。

私の頭がそれの適切な頭/尾を作るのは少し遅いので、今のところ十分です!

于 2013-04-27T23:35:51.967 に答える