FEMプログラムをデバッグするためにCUDA(VC++、Visual Studio 2008 SP1)を使用しています。プログラムは、cudaが不十分なため、Win32プラットフォーム上でのみ実行できます。リンクされているライブラリファイルはすべてx86プラットフォームでコンパイルされていると思いますが、コンパイルすると、「致命的なエラーLNK1112:モジュールマシンタイプ 'x64'がターゲットマシンタイプ 'X86'と競合します」というエラーメッセージが表示されます。
プラットフォームをx64に変換しようとしましたが、うまくいきませんでした。教えてください。「モジュールマシンタイプ」と「ターゲットマシンタイプ」とは何ですか。どうやってそれを克服することができますか?
この厄介な問題に遭遇したので、私はこれについて blog エントリを書き、そしてついに私のシステムを正常な状態に戻しました。
これらはこの順序で、チェックするべき事柄です:
プロパティ>設定プロパティ>リンカ>詳細設定>ターゲットマシンで、リンカ設定のプロパティオプションを確認します。 64ビットビルドをターゲットにしている場合はMachineX64を、32ビットビルドをターゲットにしている場合はMachineX86を選択します。
ビジュアルスタジオのメインメニューから「ビルド」>「構成マネージャー」を選択します。プロジェクトに正しいプラットフォームが指定されていることを確認してください。 IDEをx64をビルドするように設定することは可能ですが、ソリューション内の個々のプロジェクトはwin32をターゲットにするように設定できます。だから、ええ、ビジュアルスタジオは自分自身を掛けるためにたくさんのロープを残します、しかしそれは人生です。
それらが本当にターゲットとしているプラットフォームのタイプであることをあなたのライブラリファイルで確認してください。これは、ビジュアルスタジオのVC\binディレクトリにあるdumpbin.exeを使用して使用できます。すべての機能をダンプするには、-headersオプションを使用してください。各機能のマシンエントリを探します。 64ビットビルドの場合はx64を含める必要があります。
ビジュアルスタジオで、メインメニューから「ツール」>「オプション」を選択します。 [プロジェクトとソリューション]> [VC++ディレクトリ]を選択します。プラットフォームドロップダウンからx64を選択します。最初のエントリが$(VCInstallDir)\ bin\x86_AMD64に続けて$(VCInstallDir)\であることを確認してください。 bin.
ステップ4を実行したら、すべてが私のために再び働いた。問題は、64ビットターゲットに向けてコンパイルしたいすべてのプロジェクトでこの問題が発生していたことです。
C Johnsonリストに加えて、次の点を追加します。
Visual Studioで確認します。
プロジェクトのプロパティ->構成プロパティ->リンカ->コマンドライン。
「追加オプション」には/machine:X86
を含めないでください
CMake出力によって生成されたこのようなキーがあります: CMake x86プロジェクトを生成し、Visual Studio 2010のConfiguration Manager
を介してx64プラットフォームを追加しました-すべてが新しいためにうまく作成されましたリンカコマンドラインが/machine:X86
を個別に指定したことを除き、プラットフォーム。
VS2003から変換されたプロジェクトにX64ビルドを追加しようとしたときに、VS2008で同じ問題が発生しました。
Googleでこのエラーを検索したときに見つかったものすべて(ターゲットマシン、VC++ディレクトリ、DUMPBINなど)を調べたところ、すべて問題ないようでした。
最後に私は新しいテストプロジェクトを作成し、同じ変更をしました、そしてそれはうまくいったようです。
Vcprojファイル間の差分をとることは問題を明らかにしました....
私の変換したプロジェクトでは、[リンカー] - > [コマンドライン]の下に追加オプションとして/ MACHINE:i386が設定されていました。したがって、2つの/ MACHINEオプションが設定され(x64とi386の両方)、追加のものが優先されました。
これを削除して、[リンカ] - > [詳細] - > [ターゲットマシン]で正しく設定すると、問題は解決しました。
すべてのプロジェクト設定は完璧に見えましたが、それでもエラーが発生しました。 .vcxproj
ファイルを調べて「x86」を検索すると、問題が明らかになりました。
<Lib>
<AdditionalOptions> /machine:X86 %(AdditionalOptions)</AdditionalOptions>
</Lib>
すべての発生(10個の個別のファイル設定)を素早く検索/置換することで問題を解決しました。
この問題はコンパイルとターゲットマシンの仕様の違い(x86&x64)が原因であるため、以下の手順に従ってください。
それは私の問題を解決しました。
あなたはたぶんあなたがx86のためにリンクしている間(それはターゲットマシンタイプです)、x64(それはモジュールマシンタイプです)をターゲットにした1つの.OBJまたは.LIBファイルを持っています。
.OBJファイルでDUMPBIN/HEADERSを使用して、FILE HEADER VALUESブロック内のマシンエントリを確認します。
Visual Studio 2012 +/-では、 "Configuration Properties'.Linker。"コマンドラインのプロパティページに "Additional Options"というラベルの付いたボックスが含まれています。 I386私のプロジェクトでは問題があり、エラーが発生しました。
私はQTを構築するときにこの問題に遭遇しました。私がどこかで読んだ指示は私がVSコマンドプロンプトを使用してnmakeを設定することを提案しました。
私はx64コマンドプロンプトを選び、面倒なことなくconfigureを実行しました。私はnmakeを試したとき、それはこのエラーを与えた。
一部のコンポーネントは32ビット用に事前に構築されていると思います。このエラーは、どのモジュールがx86用にビルドされたかについても報告しました。
私は32ビットのデフォルトのVSコマンドPromptを使用しました、そしてそれは働きました。
Visual Studio 2013では、
1)[プロジェクトのプロパティページ]、[構成プロパティ]、[リンカ]、[すべてのオプション]の順にチェックインし、設定が誤っているすべてのマシンとディレクトリを修正します。
2)[プロジェクトのプロパティページ]、[構成プロパティ]、[リンカ]、[入力]の順にチェックインし、設定が間違っているディレクトリをすべて修正します。
1)の例を参照
私はCMakeを使っていて、それからwin32設定を追加しました。プロパティページにx86と表示されていましたが、実際にはテキストエディタでvcxprojファイルを開くとx64でした。手動でx86に変更することでこれが解決しました。
vcxprojファイルに 'MACHINE:i386'が含まれている可能性がありますvcxprojファイルをエディタで編集します。それを除く !
"project property - CUDA Runtime API - GPU - NVCC Compilation Type"
64ビットのコンパイルオプション-m64 -cubin
を設定します。
ヒントはコンパイルログです。このような:
nvcc.exe ~~~~~~ -machine 32 -ccbin ~~~~~
その"-machine 32"
が問題です。
最初に64ビットコンパイルオプションを設定し、次にハイブリッドコンパイルオプションを再設定します。それからあなたは成功を見ることができます。
これは、私がまだx86モードの間にライブラリディレクトリを追加し、継承されたディレクトリを誤って削除して代わりにハードコードされていたために、今日私に起こりました。それからx64に切り替えた後、私のVC++ディレクトリはまだ読んでいます:
"...; $(VC_LibraryPath_x86); $(WindowsSDK_LibraryPath_x86);"
_x64の代わりに。
ソリューションにlibプロジェクトがある場合は、[プロパティ] - > [ライブラリアン] - > [一般]の[ターゲットマシン]プロパティを確認します。
それは非常にイライラさせて厄介な問題ですが、一度それを理解すれば、それは非常に簡単です:あなたがそれを別のタイプのターゲットにしたという事実にもかかわらず、あなた).
どのobjファイルがクラッシュの原因となっているのかを調べることで問題の原因を突き止め、そこで問題を探し始めることができます。すべてのobjは、cpp、c、asmなどの類似のソースコードを持っています。その周りには、間違ったツールを使っている特別なビルドイベントがあるかもしれません。プロパティシートでそれを確認してください。
Cジョンソンのやるべきことのリストを見る前に、まずそこを見てみたいと思います。
Jhonsonさんのリストに加えて、図書館のフォルダもチェックしてください
ビジュアルスタジオで、メインメニューから「ツール」>「オプション」を選択します。 [プロジェクトとソリューション]> [VC++ディレクトリ]を選択します。プラットフォームドロップダウンからx64を選択します。
$(VCInstallDir)lib\AMD64;
$(VCInstallDir)atlmfc\lib\AMD64;
$(WindowsSdkDir)lib\x64;
module machine typeはコンパイルしているマシンであり、target machine typeはバイナリをビルドしているアーキテクチャx86またはx64です。
コマンドプロンプトを使用する(プロンプトを実行する)場合、これが役立つ場合があります。
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" --help
Error in script usage. The correct usage is:
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option]
or
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option] store
or
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option] [version number]
or
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option] store [version number]
where [option] is: x86 | AMD64 | arm | x86_AMD64 | x86_arm | AMD64_x86 | AMD64_arm
where [version number] is either the full Windows 10 SDK version number or "8.1" to use the windows 8.1 SDK
:
The store parameter sets environment variables to support
store (rather than desktop) development.
:
For example:
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_AMD64
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_arm store
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_AMD64 10.0.10240.0
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_arm store 10.0.10240.0
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 8.1
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 store 8.1
:
Please make sure either Visual Studio or C++ Build SKU is installed.
また、これが好きなら:
CL "%1%2%3"/EHsc/link user32.lib Gdi32.lib Winmm.lib comctl32.lib *。obj/SUBSYSTEM:CONSOLE/MACHINE:x86
あなたはdel * .objbefore;リンカが以前のコンパイルで残った64ビットと32ビットの両方のオブジェクトと混同されないようにするには?
まずはじめに、以下のことを試してください。1. Configuration Managerに進み、新しいx64がまだない場合は作成します。 2. x 64ソリューションを選択します。 3.プロジェクトのプロパティに移動し、[リンカ] - > [詳細]を選択してx64マシンを選択します。 4.今すぐソリューションを再構築します。
それでもまだ同じエラーが出ます。きれいな解決策を試してから再構築してビジュアルスタジオを開くと、最近開いたプロジェクトのリストが表示されます。プロジェクトを右クリックしてそこから削除します。今すぐ解決策に行き、再度解決策を開きます。
私はVS010を使用しているように私がちょうど私がチェックしたように私は私のVS2008ソリューションをVS2010に変換し、私の古いソリューションで私はmfcs90d.lib(設定 - >リンカ - >入力 - >追加の依存関係)を持っているそれがmfcs100d.libであるVS2010フォルダで、私はそれがうまく働いた(設定 - >リンカ - >入力 - >追加の依存関係)でmfcs90d.libをmfcs100d.libに変えました。
この問題は、プロジェクトが[プロジェクトのプロパティ] - > [構成プロパティ] - > [全般]で同じ中間ディレクトリを持つように設定されている場合にも発生する可能性があります。