

Windows 10(x64)でOpenSSL1.1をコマンドラインからビルドするとエラーが発生します。  
x86のビルドは通るのですが原因は何でしょうか。  
LNK1112発生時はソリューションのプロパティから対象コンピューターを変更するという方法が案内されていますが、コマンドラインからこの設定は変更できるのでしょうか。

ご教授お願い致します。

■現象  
perlによるmakefileの生成後、nmakeでエラーが発生する。  
エラーメッセージ

[code]

    cl  /Zi /Fdossl_static.pdb /Gs0 /GF /Gy /MD /W3 /wd4090 /nologo /O2 /I "." /I "crypto\include" /I "include" /I "crypto" -D"L_ENDIAN" -D"OPENSSL_PIC" -D"OPENSSLDIR=\"C:\\Program Files\\Common Files\\SSL\"" -D"ENGINESDIR=\"C:\\openssl\\build\\win\\x64\\lib\\engines-1_1\"" -D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"OPENSSL_USE_APPLINK" -D"NDEBUG"  /Zs /showIncludes "crypto\cversion.c" 2>&1 > crypto\cversion.d
            IF EXIST .manifest DEL /F /Q .manifest
            IF EXIST libcrypto-1_1-x64.dll DEL /F /Q libcrypto-1_1-x64.dll
            link /nologo /debug /dll  /nologo /debug  /implib:libcrypto.lib /out:libcrypto-1_1-x64.dll /def:libcrypto.def @C:\Users\XXXXXXXXX\AppData\Local\Temp\nm5483.tmp || (DEL /Q libcrypto-1_1-x64.* libcrypto.lib && EXIT 1)
    crypto\cversion.obj : fatal error LNK1112: モジュールのコンピューターの種類 'x64' は対象コンピューターの種類 'x86' と競合しています。
    
[/code]

■環境  
VC2019  
Perl v5.28.1  
ビルド対象Ver. OpenSSL 1.1.1d

■ビルドコマンド  
build.bat

[code]

    set PATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build;%PATH%
    call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsx86_amd64.bat"
    rem vcvars64.batでも同様のエラーになる
    
    perl Configure no-asm --prefix=C:/openssl/build/win/x64 VC-WIN64A
    
    nmake install
    
[/code]


CC BY-SA 4.0
2019-10-21T08:33:55.737
59847
2019-10-30T07:58:48.153
2019-10-21T09:02:03.527
36284
36284
question
openssl
OpenSSL1.1のx64ビルドができない


自己解決しました。

x86ビルド後のゴミファイルが残った状態でビルドしていたためx86オブジェクトのリンクでエラーが発生していました。  
OpenSSLのtgzを再展開後ビルドで成功しました。


CC BY-SA 4.0
2019-10-23T07:43:33.640
59909
2019-10-23T07:43:33.640
36284
59847
answer


自己解決とのことですが補足を。

ソースツリーとビルドツリーを分離できます。例えば`build-x86` /
`build-x64`ディレクトリをそれぞれ作成すれば生成されたファイルが混線することを回避できます。

[code]

    mkdir build-x64
    cd build-x64
    perl ..\Configure no-asm --prefix=C:/openssl/build/win/x64 VC-WIN64A
    nmake install
    cd ..
    
[/code]

またopensslリポジトリには[`appveyor.yml`](https://github.com/openssl/openssl/blob/master/appveyor.yml)が置かれているのでこれが参考になります。

[code]

    mkdir _build
    cd _build
    perl ..\Configure VC-WIN64A-masm no-makedepend
    nmake build_all_generated
    nmake PERL=no-perl
    cd ..
    
[/code]

とかやってるみたいです。


CC BY-SA 4.0
2019-10-23T22:18:45.663
59918
2019-10-23T22:18:45.663
4236
59847
answer