204

FEM プログラムのデバッグに CUDA (VC++、Visual Studio 2008sp1) を使用しています。cuda が不十分なため、このプログラムは Win32 プラットフォームでのみ実行できます。リンクされているライブラリ ファイルはすべて x86 プラットフォームでコンパイルされていると思いますが、コンパイルすると、「致命的なエラー LNK1112: モジュール マシン タイプ 'x64' がターゲット マシン タイプ 'X86' と競合しています」というエラー メッセージが表示されます。

プラットフォームを x64 に変換しようとしましたが、うまくいきませんでした。教えてください:「モジュール マシン タイプ」と「ターゲット マシン タイプ」とは何ですか? どうすればそれを克服できますか?

4

28 に答える 28

281

この厄介な問題に遭遇したので、これについてブログエントリを書き、最終的にシステムを正常な状態に戻しました。

これらは、次の順序で確認する必要があります。

  1. [プロパティ] > [構成プロパティ] > [リンカー] > [詳細設定] > [ターゲット マシン] で、リンカー設定のプロパティ オプションを確認します。64 ビット ビルドをターゲットにしている場合は MachineX64 を選択し、32 ビット ビルドを作成している場合は MachineX86 を選択します。

  2. Visual Studio のメイン メニューから [ビルド] > [構成マネージャー] を選択します。プロジェクトに正しいプラットフォームが指定されていることを確認してください。IDE は x64 をビルドするように設定できますが、ソリューション内の個々のプロジェクトは win32 をターゲットにするように設定できます。そうです、ビジュアル スタジオは首を吊るすために多くのロープを残していますが、それが人生です。

  3. ライブラリ ファイルが本当に対象のプラットフォームのタイプであることを確認してください。これは、Visual Studio の VC\bin ディレクトリにある dumpbin.exe を使用して使用できます。-headers オプションを使用して、すべての関数をダンプします。各機能のマシン エントリを探します。64 ビット ビルドの場合は x64 を含める必要があります。

  4. Visual Studio で、メイン メニューから [ツール] > [オプション] を選択します。[プロジェクトとソリューション] > [VC++ ディレクトリ] を選択します。[プラットフォーム] ドロップダウンから x64 を選択します。最初のエントリが$(VCInstallDir)\bin\x86_amd64 で、その後に$(VCInstallDir)\binが続くことを確認してください。

ステップ4を実行すると、すべてが再び機能しました。問題は、64 ビット ターゲットに向けてコンパイルしたいすべてのプロジェクトでこの問題に遭遇していたことです。

于 2010-12-06T07:06:19.930 に答える
165

C Johnsonのリストに加えて、次の点を追加します。

Visual Studio にチェックインします:
[プロジェクト プロパティ] -> [構成プロパティ] -> [リンカー] -> [コマンド ライン]。

「追加オプション」には含めないでください/machine:X86

CMake出力によって生成されたそのようなキーがあります:CMakeはx86プロジェクトを生成し、次にConfiguration ManagerVisual Studio 2010でx64プラットフォームを追加しました-リンカーコマンドラインを除いて、すべてが新しいプラットフォーム用に正常に作成されました/machine:X86

于 2013-04-08T22:35:17.317 に答える
55

VS2003 から変換されたプロジェクトに X64 ビルドを追加しようとしたときに、VS2008 で同じ問題が発生しました。

Google でこのエラーを検索したときに見つかったすべてのもの (ターゲット マシン、VC++ ディレクトリ、DUMPBIN など) を調べたところ、すべて問題ないように見えました。

最後に、新しいテスト プロジェクトを作成し、同じ変更を行ったところ、動作しているように見えました。

vcproj ファイル間の diff を実行すると、問題が明らかになりました....

私の変換されたプロジェクトには /MACHINE:i386 が追加オプションとして設定されていて、Linker->Command Line の下に設定されていました。したがって、2 つの /MACHINE オプション セット (x64 と i386 の両方) があり、追加のオプションが優先されました。

これを削除し、Linker->Advanced->Target Machine の下で適切に設定すると、問題が解消されました。

于 2012-01-13T08:28:22.803 に答える
13

問題はコンパイルとターゲット マシンの仕様 (x86 & x64) の違いによるものであるため、次の手順に従います。

  1. 構成する C++ プロジェクトを開きます。
  2. [構成マネージャー] ボタンを選択して、[構成マネージャー] ダイアログ ボックスを開きます。
  3. [アクティブなソリューション プラットフォーム] ドロップダウン リストで、[新しいソリューション プラットフォーム] ダイアログ ボックスを開くオプションを選択します。
  4. [新しいプラットフォームを入力または選択] ドロップダウン リストで、64 ビット プラットフォームを選択します。

それは私の問題を解決しました。

于 2014-05-13T20:55:24.873 に答える
13

x86 (ターゲット マシン タイプ) をリンクしているときに、x64 (モジュール マシン タイプ) をターゲットとする .OBJ または .LIB ファイルが 1 つある可能性があります。

.OBJ ファイルで DUMPBIN /HEADERS を使用し、FILE HEADER VALUES ブロック内のマシン エントリを確認します。

于 2010-08-25T08:01:55.030 に答える
7

Visual Studio 2012 +/- では、"Configuration Properties'.Linker."Command Line" のプロパティ ページに "Additional Options" というラベルの付いたボックスが含まれています。x64 をビルドしている場合は、ボックスに /MACHINE が含まれていないことを確認してください。 I386.私のプロジェクトはそうしましたが、問題のエラーが生成されました。

于 2014-11-15T04:59:40.277 に答える
4

QTを構築するときにこの問題に遭遇しました。どこかで読んだ指示では、VS コマンド プロンプトを使用して nmake を構成するよう提案されていました。

x64 コマンド プロンプトを選択し、あまり手間をかけずに構成を実行しました。nmake を試したところ、このエラーが発生しました。

一部のコンポーネントは 32 ビット用に事前にビルドされていると思います。このエラーは、x86 用にビルドされたモジュールも報告しました。

32 ビットのデフォルトの VS コマンド プロンプトを使用しましたが、うまくいきました。

于 2013-08-29T09:52:25.200 に答える
3

Visual Studio 2013 では、

1) プロジェクト プロパティ ページ/構成プロパティ/リンカ/すべてのオプションをチェックインし、構成されていないすべてのマシンとディレクトリを修正します。

2) プロジェクト プロパティ ページ / 構成プロパティ / リンカー / 入力をチェックインし、構成されていないすべてのディレクトリを修正します。

1の例を参照)

于 2014-01-03T17:43:09.323 に答える
3
"project property - CUDA Runtime API - GPU - NVCC Compilation Type"

64 ビット コンパイル オプションを設定する-m64 -cubin

ヒントはコンパイルログにあります。このような:

nvcc.exe ~~~~~~ -machine 32 -ccbin ~~~~~

それ"-machine 32"が問題です。

最初に 64 ビット コンパイル オプションを設定し、次にハイブリッド コンパイル オプションを再設定します。その後、成功を見ることができます。

于 2013-07-25T10:34:37.493 に答える
0

x86モードのままライブラリディレクトリを追加し、継承されたディレクトリを誤って削除して代わりにハードコーディングしたため、これは今日私に起こりました。次に、x64 に切り替えた後も、私の VC++ ディレクトリは次のように表示されます。

"...;$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);"

_x64 の代わりに。

于 2015-10-17T18:41:58.787 に答える
0

私はCMakeを使用していましたが、win32構成を追加しました。プロパティ ページにはx86が表示されていましたが、実際にはテキスト エディターで vcxproj ファイルを開くと x64 でした。手動で x86 に変更すると、これが解決しました。

于 2016-01-31T17:44:39.597 に答える
0

Visual Studio 2013 で Win32 を *64 に変更することで、この問題を解決しました。

于 2018-08-08T09:44:58.130 に答える
0

Jhonson のリストに加えて、ライブラリのフォルダも確認してください

Visual Studio で、メイン メニューから [ツール] > [オプション] を選択します。[プロジェクトとソリューション] > [VC++ ディレクトリ] を選択します。[プラットフォーム] ドロップダウンから x64 を選択します。

$(VCInstallDir)lib\AMD64;
$(VCInstallDir)atlmfc\lib\amd64;
$(WindowsSdkDir)lib\x64;
于 2014-01-13T15:55:52.483 に答える