2

SSLをサポートするWindows(VS2010 32および64ビット)でlibpqをコンパイルすることに疑問があります。postgresの最新ソースと OpenSSL Win64 v1.0.1c をダウンロードし まし。libpq フォルダーで nmake を実行しました。

cd postgresql-9.2.2\interfaces\libpq

nmake /f win32.mak CPU=AMD64 USE_SSL=1 SSL_INC=C:\OpenSSL-Win64\include SSL_LIB_PATH=C:\OpenSSL-Win64\lib

その後、コンパイルが終了し、bufferoverflowU.lib が見つかりません。少し調べてみると、この lib は Windows SDK と共にデプロイされており、VS 2005 以降は不要であることがわかりました ( Vista / Win 7 SDK bufferoverflowu.lib linking error を参照)。したがって、libpq の make ファイル (win32.mak:20) で、次の行をコメントアウトしました。

ADD_SECLIB=bufferoverflowU.lib

そしてそれはうまくコンパイルされます。また、この libpq を ssl でテストしても問題はありませんでした。

ビルドから bufferoverflowU.lib を削除するのは良心の呵責が必要ですか、それともメイクファイルが VS 2010 用ではないからですか? (ところで: openssl は、VC フォルダー内のライブラリの名前をそれぞれ *MD.lib にそれぞれ *MT.lib に変更しました。古い名前のライブラリは、C:\OpenSSL-Win64\lib の 1 つ上のディレクトリにあります)

VS2010 ビルドで bufferoverflowU.lib が必要かどうか教えてもらえますか?

乾杯、550

4

1 に答える 1

1

VS2010 ビルドで bufferoverflowU.lib が必要かどうか教えてもらえますか?

いいえ、もう必要ありません。bufferoverflow.lib友人は、スタック Cookie をチェックするコードにプッシュされました。この KB を参照してください: Win32 ソフトウェア開発キット (SDK) または Windows Server 2003 Service Pack 1 用の Windows Server 2003 ドライバー開発キット (DDK) を使用してソース コードをビルドすると、"リンカー ツール エラー LNK2001" エラー メッセージが表示される場合があります

スイッチを使用すると、問題を解決し、実行可能ファイルを強化できると思います/GS


nmake /f win32.mak CPU=AMD64 USE_SSL=1 SSL_INC=C:\OpenSSL-Win64\include
SSL_LIB_PATH=C:\OpenSSL-Win64\lib

Visual C++ 防御によるコードの保護で説明されているすべてのスイッチを追加することを検討する必要があります。時間がない場合のリストは次のとおりです。

  • /GS
  • /SafeSEH
  • /NXCompat
  • /DynamicBase

さらに、#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1可能であれば行う必要があります。最後に、#pragma strict_gs_check(on)Windows 上のリスクの高いソース ファイルにも追加する必要があります。慎重に使用する必要がありますが、ソース ファイルがインターネットからの入力を解析する場合など、リスクの高い状況で使用することをお勧めします。

*nix プロジェクトでは、Windows のセキュリティ スイッチが欠落していることがよくあります。私はこれを「切断」と呼んでおり、両方の方向に進むのを見てきました (*nix -> Windows および Windows -> *nix)。誰もがすべての専門家になることはできません ;)

(少しさまようことをお詫びします。悪いプロジェクトのセットアップは私のペットピーブです)。

于 2013-12-01T03:54:55.553 に答える