web-dev-qa-db-ja.com

モジュールマシンタイプ「X86」をターゲットマシンタイプ「x64」Visual Studioと競合させる方法

pythonスクリプトで使用する必要があるOpensslライブラリをコンパイルしています。VisualStudio 2015 Developer Command Promptを使用しています。私のマシンはWindows 7 64ビットです。

コマンドを入力すると:nmake -f ms\ntdll.mak

私はこのエラーを受け取ります:

tmp32dll\uplink.obj : fatal error LNK1112: module machine type 'X86' conflicts w
ith target machine type 'x64'
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0
\VC\BIN\AMD64_arm\link.EXE"' : return code '0x458'
Stop.

私は検索し、同様の問題のいくつかの解決策は、プロジェクト設定からプロジェクトプラットフォームを変更することを提案しています。 VSプロジェクトがありません。 OpenSSLライブラリをコンパイルするためだけに、これらすべてのコマンドを実行しています。 VSコマンドを使用しています。

19
user2192774

私は同じ問題に出くわしました-ちょうどVS2013で。

私が遭遇した2つのアプローチがありますが、あなたのケースでは役立つかもしれません:

最初のアプローチ

(VS2013以降のバージョンにのみ関連する場合があります)

「VS2015 x64 Native Toolsコマンドプロンプト」を開き、そこでコマンドを実行します。

 Note:
 If you get the opposite message:
 module machine type 'x64' conflicts with target machine type 'x86' 
 then you should open the 'VS2015 x86 Native Tools Command Prompt' 

両方のツールは、フォルダーの下にあります。

C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\Common7\Tools\Shortcuts

2番目のアプローチ

(VS2013より前のバージョンにのみ関連する場合があります)

VS2015の開発者コマンドプロンプトでは、次のコマンドを実行してコンパイラーターゲットプラットフォームを変更できます。

「C:\ Program Files(x86)\ Microsoft Visual Studio 15.0\VC\vcvarsall.bat x64」

「C:\ Program Files(x86)\ Microsoft Visual Studio [VSバージョン]\VC\vcvarsall.bat [ターゲットプラットフォーム]」

VS 2017の場合

「C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat [ターゲットプラットフォーム]」

Note:
VS Version: 10.0|11.0|12.0|15.0|... 
Target Platform: x86|AMD64|x64|arm|x86_arm|x86_AMD64|AMD64_x86|AMD64_arm|AMD64_x86
*leaving the target platform empty will default to x86
22
Merav Kochavi

このエラーは、tmp32dll\uplink.objは32ビットのバイナリですが、リンカーは64ビットを対象としているため、64ビットであると予期していました。

64ビットとして再コンパイルするか、単に再構築を実行する(またはすべてを削除する*.objまたはバイナリ出力ディレクトリ全体)

これは、ビルドプロセスが中断され、ターゲットプラットフォームを変更し、ビルドプロセスを段階的に繰り返す場合に発生する可能性があります。 32ビットは64ビットと混ざらないため、完全にどちらかの方法です。

6
V-R

このエラーは、ビルド内の特定のコンポーネントがx64ではなくx86バイナリ(ターゲットマシンのアーキテクチャ)としてコンパイルされているために発生します。基本的に、リンカに正方形のパズルのピースを与え、円形の穴に収まるように指示しています。

あなたの場合:

tmp32dll\uplink.obj : fatal error LNK1112: module machine type 'X86' conflicts w
ith target machine type 'x64'
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0
\VC\BIN\AMD64_arm\link.EXE"' : return code '0x458'
Stop.

エラーの原因となっているobjファイルの名前を確認します。uplink.objであるため、uplink.cpp(または、uplink.asmまたはUplink.whatever)を調べて、どのようにコンパイルされているかを調べます。通常、これらはすべてVSで自動化されますが、開発者によって追加された特別なビルドステップが存在する場合があります。カスタム、ビルド前、およびビルド後のイベントを調べて、x86ツールを使用してアセンブルされているかどうかを確認します。

私の場合、Visual Studio 8を使用してx64で7Zipをコンパイルしようとしていましたが、x86でコンパイルしてビルドプロセスを中断していたアセンブリマクロ(asm)以外はすべてコンパイルしていました。 VSは、asmのプロパティシートを見て、ml64.exeではなくml.exeを使用してコンパイルしようとしていることがわかりました。私の場合、このエラーを取り除くためにml64.exeへの呼び出しを変更しました(すべてのx86コードを取り除くことによってのみasmファイルを64ビットに変更する必要がありましたが、それは別の話です)。

1
thebunnyrules