WxFreeChartライブラリからサンプルアプリを実行しようとしています。リンクのコンパイル後にエラーがあります:
wxcode_msw28d_freechart.lib(wxfreechart_lib_xydataset.obj) : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'
リンカーoption\advanced\target machineをMachineX64に切り替えようとしましたが、機能しません。
私はVisual Studio 2008を使用していますか?
手伝ってくれてありがとう
エラーは明白です。異なるCPUターゲットでコンパイルされたライブラリをリンクしようとしています。実行可能イメージには、純粋なx86(32ビット)または純粋なx64(64ビット)コードのみを含めることができます。混合はできません。
プロジェクトの新しい構成を作成してターゲットCPUを変更しますが、リンカー設定を変更するだけでは不十分です。ビルド+構成マネージャー、右上のアクティブソリューションプラットフォームコンボ、新規を選択してx64を選択します。これにより、いくつかの変更されたプロジェクト設定、最も重要なのは使用されるコンパイラを含む新しい構成が作成されます。
VS2010より前の64ビットコンパイラは、デフォルトでnotがインストールされることに注意してください。プラットフォームコンボにx64が表示されない場合は、setup.exeを再実行し、64ビットコンパイラをインストールするオプションをオンにする必要があります。次に、適用したService Packインストーラーを再実行します。
痛みの少ないアプローチとして考えられるのは、32ビットバージョンのライブラリを使用することです。
私もこれにぶつかり、解決策を見つけました。
まず、この問題にどのように取り組んだかについて。 x86でビルドするプロジェクトがあります。次に、Configuration Managerを使用してx64を追加すると、この問題が発生しました。
BuildLog.htm
注意深く、これらの両方がリンカオプションとしてリストされているのを見ました。
/MACHINE:X64
/machine:X86
[プロパティページ]ダイアログでこれを変更できる場所が見つからなかったため、.vcproj
ファイルで適切な行を探し、次のように変更しました。
AdditionalOptions=" /STACK:10000000 /machine:x64 /debug"
そして問題が解決しました。
プロジェクトプロパティ->構成プロパティ-> Librarian Set Target Machine to MachineX64(/ MACHINE:X64)に移動します
私の場合、32ビットから新しい構成(64ビット)に「コピーされた設定」があり、ライブラリを更新していなかったためだと思われます。奇数。
1> MSVCRTD.lib(ti_inst.obj):致命的なエラーLNK1112:モジュールマシンタイプ「X86」がターゲットマシンタイプ「x64」と競合しています
これは、「プロパティ-> VC++ディレクトリ->ライブラリディレクトリ」が、32ビットライブラリが組み込まれているディレクトリを指していることを意味します。なんとか修正!
私の場合 http://social.msdn.Microsoft.com/Forums/ar/vcgeneral/thread/c747cd6f-32be-4159-b9d3-d2e33d2bab55
参照: http://betterlogic.com/roger/2012/02/visual-studio-2010-express-64-bit-woe
この問題は、コンパイルとターゲットマシンの仕様(x86とx64)の違いによるものであるため、次の手順に従ってください。
これで私の問題が解決しました。
X64プロパティで。\ Releaseのすべての出現を。\ x64\Releaseに変更してみてください。少なくともこれは私のために働いた...
答えてくれてありがとう。私の問題は、Visual Studioのx64ソリューションをConfiguration Managerのみで32ビットに変更したことです。 32ビットとして新しいソリューションを作成し、C++コードをコピーすると、このエラーはなくなりました。 l00g33kとRogerAttrillの提案が解決策だったと思いますが、私もうまくいきました。
最近、私もこの問題に遭遇しました。それは、vs _x64
_でqt(_win32
_)を使用したためです。 qtアプリケーション_x64
_を使用する場合は、上記のようにvs _x64
_-を選択できます。 _win32
_を使用したいが、まだ使用していない場合は、qt(_32bit
_)をダウンロードし、lib
ディレクトリなどの環境を正しく設定する必要があります(注:多分あなたはx64(other version)
で古い設定になっています。win32またはx64を別のものに変換すると、_Additional Dependencies
_には古いディレクトリが含まれます!)
これらの答えに基づいて-Librarian-> Command Line-> Additional Options(x64 Platform用)でX86リファレンスを変更する必要もありました
これは少し古いことは知っていますが、別のヒントを提供すると思いました。私の状況では、維持しなければならないこのアプリケーションを継承しました。 VS2008プロジェクトには、C/C++-> OutputFIles-> "ObjectFIleName"および "Program Database File Name"(Win32とx64の両方のプラットフォーム用)に同じ文字列が含まれていました。したがって、Win32プラットフォームを構築したときは問題なく構築できましたが、x64を構築しようとするとエラーが発生しました。
\ Debug64\Objects\common.obj:致命的なエラーLNK1112:モジュールマシンタイプ 'X86'はターゲットマシンタイプ 'x64'と競合します
明らかに、両方のpatformsがcommon.objを同じ場所に格納していたため、x64を構築しようとしたときに、リンカーは既存のオブジェクトファイル(x86)を取得しました。
修正するには、既存の文字列をx64のマクロ「$(IntDir)\」に置き換えて(引用符なし)、残りのプロジェクトのようにマクロが正しいパスに解決されるようにしました。これで私の問題は解決しました。
この問題はリンカとは関係ないため、設定を変更しても結果には影響しません。これは、x86をターゲットにしようとしているが、何らかの理由でwxcode_msw28d_freechart.libがx64ファイルとしてビルドされていると想定しているために発生しています。
Wxcode_msw28d_freechart.libとその派生元のソースコードを調べてみてください。あなたの問題はそこで起こっています。間違ったツールセット(x86ではなくx64)を使用している特別なビルドステップがあるかどうかを確認します。
今回はVS2012のi00gとThomasの回答の更新(一部の名前は変更されています)。構成マネージャーを使用してx86設定をx64ターゲットにコピーした後、以前と同じ理由で問題が発生します(x64構成ではlibターゲットは正しくありません)。 .vcxproj(テキストエディター)を開き、必要に応じてMachineX86をMachineX64に置き換えます。 (これがプロパティシートのどこにあるかはまだわかりません。..)これは静的ライブラリでのみ必要なようです。
「compile -DIPLIB = NONE filename.cxx」の手順に進む前に、VIsual Studioインストールのパスをvcvarsallバッチファイルまで取得し、以下に示すように構成を変更します。
* C:\ apps\MVS9\VC\vcvarsall.bat x86_AMD64 *
次のステップは
コンパイル-64ビット-DIPLIB = none filename.cxx
これで問題が解決しました