19

INSTALL.W64 の指示に従った後、2 つの問題が発生しました。

  • コードは引き続き「out32」フォルダーに書き込まれます。ワークステーションでライブラリの 32 ビット バージョンと 64 ビット バージョンの両方にリンクできるようにする必要があるため、64 ビット バージョンが 32 ビット ライブラリを破壊することは望ましくありません。
  • 出力は 32 ビットのままです。これは、x64 アプリからライブラリにリンクしようとすると、「未解決の外部シンボル」エラーが発生することを意味します。
4

8 に答える 8

25

静的ライブラリ (リリースとデバッグの両方) をコンパイルするには、次のことを行う必要があります。

  1. Perl をインストールする - www.activestate.com
  2. 「Visual Studio 2008 x64 Cross Tools コマンド プロンプト」を実行します (注: 通常のコマンド プロンプトは機能しません)。
  3. perl で設定する VC-WIN64A を設定する
  4. 実行: ms\do_win64a
  5. ms\nt.mak を編集し、出力ディレクトリで「32」を「64」に変更します。
    # 興味深いすべての出力ディレクトリ
    OUT_D=out64.dbg
    # すべての一時的なマックの出力ディレクトリ
    TMP_D=tmp64.dbg
    # ヘッダー ファイルの出力ディレクトリ
    INC_D=inc64
    INCO_D=inc64\openssl
  1. ms\nt.mak を編集し、エラーが発生した場合は EX_LIBS から bufferoverflowu.lib を削除します。
  2. 実行: nmake -f ms\nt.mak
  3. ms\do_win64a ファイルを編集し、"ml64" と最後の 2 行を除くすべての行に "debug" を追加します。
  4. 実行: ms\do_win64a
  5. 手順 4 と 5 を繰り返します
  6. ms\nt.mak ファイルを編集し、CFLAG リストに /Zi を追加してください!
  7. 実行: nmake -f ms\nt.mak
于 2008-10-01T15:33:27.323 に答える
4

1.0.1c ソースを使用して、この方法で問題を解決しました。

util/pl/VC-32.plこのブロックをの行の直前に追加します$o='\\';

if ($debug)
    {
    $ssl .= 'd';
    $crypto .= 'd';
    }

util/pl/VC-32.plこのブロックをの行の直前に追加しますif ($debug)

if ($FLAVOR =~ /WIN64/)
    {
    $out_def =~ s/32/64/;
    $tmp_def =~ s/32/64/;
    $inc_def =~ s/32/64/;
    }

次に、すべての種類をビルドします。

setenv /x86 /release
perl Configure VC-WIN32  --prefix=build -DUNICODE -D_UNICODE
ms\do_ms
nmake -f ms\ntdll.mak

setenv /x64 /release
perl Configure VC-WIN64A --prefix=build
ms\do_win64a.bat
nmake -f ms\ntdll.mak

setenv /x86 /debug
perl Configure debug-VC-WIN32  --prefix=build -DUNICODE -D_UNICODE
ms\do_ms
move /y ms\libeay32.def ms\libeay32d.def
move /y ms\ssleay32.def ms\ssleay32d.def
nmake -f ms\ntdll.mak

setenv /x64 /debug
perl Configure debug-VC-WIN64A --prefix=build
ms\do_win64a.bat
move /y ms\libeay32.def ms\libeay32d.def
move /y ms\ssleay32.def ms\ssleay32d.def
nmake -f ms\ntdll.mak
于 2012-11-21T19:38:43.593 に答える
2

公式ドキュメントによると:

「驚くかもしれません: 64 ビット アーティファクトは確かに out32* サブディレクトリに出力され、*32.dll で終わる名前が付いています。事実、64 ビット コンパイル ターゲットは、これまでのところ従来の 32 ビット Windows ターゲットに対する段階的な変更です。多数のコンパイルフラグは 32 ビットと 64 ビットの両方のターゲットに適用されますが、まだ「32」とラベル付けされています。」

したがって、最初の答えはもう必要ありません。

手順は次の場所にあります。

https://wiki.openssl.org/index.php/Compilation_and_Installation#W64

于 2016-07-30T00:08:33.913 に答える
1

cygwin でビルドしている場合は、次のスクリプトを使用できます。MSDEVPATH が既に Visual Studio ディレクトリに設定されていると仮定します。

 echo "Building x64 OpenSSL"
 # save the path of the x86 msdev
 MSDEVPATH_x86=$MSDEVPATH
 # and set a new var with x64 one
 MSDEVPATH_x64=`cygpath -u $MSDEVPATH/bin/x86_amd64`

 # now set vars with the several lib path for x64 in windows mode
 LIBPATH_AMD64=`cygpath -w $MSDEVPATH_x86/lib/amd64`
 LIBPATH_PLATFORM_x64=`cygpath -w $MSDEVPATH_x86/PlatformSDK/lib/x64`
 # and set the LIB env var that link looks at
 export LIB="$LIBPATH_AMD64;$LIBPATH_PLATFORM_x64"

 # the new path for nmake to look for cl, x64 at the start to override any other msdev that was set previously
 export PATH=$MSDEVPATH_x64:$PATH

 ./Configure VC-WIN64A zlib-dynamic --prefix=$OUT --with-zlib-include=zlib-$ZLIB_VERSION/include --with-zlib-lib=zlib-$ZLIB_VERSION/x64_lib

 # do the deed
 ms/do_win64a.bat
 $MSDEVPATH_x86/bin/nmake -f ms/ntdll.mak  ${1:-install}
于 2011-03-07T11:00:06.330 に答える
-1

MSYS+ mingw-w64を使用することもできます:

1) msys をダウンロードして C:\msys に解凍します。
2) mingw-w64 をダウンロードして c:\mingw64 に解凍し
ます。 3) msys postinstall スクリプトを実行します。mingw のインストールを求められたら、C:\mingw64\bin を指定します。
4) openssl の毎日のスナップショットを抽出します (1.0.0 リリースにはバグがあります)。ソースディレクトリで configure mingw64
make
make check
make installを実行します
5) openssl は /local/ にインストールされます

于 2010-04-18T10:11:27.880 に答える