x64でビルドしてエラーLNK1112発生したときの解決法

[戻る]
傾奇者 2017/06/03(土) 15:18:30
お世話になります。
Visual Studio 2010 VC++, MFC, SDIアプリです。
OSは、Windows 10 Home 64bit です。

従来 32bit アプリとして作成しておりました。
今般、64bit アプリになるだろうか? とやってみました。

構成マネージャー → アクティブ ソリューション プラットフォーム で、新規作成のx64 
x64 を設定し、プロパティページのリンカー → 詳細設定 → 対象コンピューターが MACHINEX64 
MACHINEX64 になっていることを確認しています。

Debug x64 でビルドすると、下記のエラーとなります。
Release x64 でビルドした場合は、正常終了します。作成したアプリも正常動作します。

エラー:
uafxcwd.lib(nolib.obj) : fatal error LNK1112: モジュールのコンピューターの種
類 'X86' は対象コンピューターの種類 'x64' と競合しています。

Visual Studio をアンインストールし再インストールしても同じ結果です。
どのように解決したらよろしいか、どうぞご教授お願いします。

傾奇者 2017/06/04(日) 14:19:00
補足します。

自分のプロジェクトは、現在次の設定になっています。

@盤面の
 ソリューション構成:Debug
 ソリューション プラットフォーム:x64 【OK】
A構成マネージャー
 構成:Debug
 アクティブ ソリューション プラットフォーム:x64 【OK】
Bリンカー → 詳細設定
 対象コンピューター:MachineX64(/MACHINEX64) 【OK】
CC/C++ → プリプロセッサ
 プリプロセッサの定義:WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)
DC/C++ → コマンドライン
 /I"_T(C:\Program Files\HTML Help Workshop\include)" /Zi /nologo /W4 /WX- /Od /D
D "WIN32" /D "_WINDOWS" /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /M
MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"x64\Debug\Aprint.p
pch" /Fa"x64\Debug\" /Fo"x64\Debug\" /Fd"x64\Debug\vc100.pdb" /Gd /errorReport:qu
ueue
EVC++ ディレクトリ
 実行可能ディレクトリ:
 $(VCInstallDir)bin\x86_amd64;$(VCInstallDir)bin;$(WindowsSdkDir)bin\NETFX 4.0 T
Tools;$(WindowsSdkDir)bin;$(VSInstallDir)Common7\Tools\bin;$(VSInstallDir)Common7
7\tools;$(VSInstallDir)Common7\ide;$(ProgramFiles)\HTML Help Workshop;$(Framework
kSDKDir)\bin;$(FrameworkSDKDir)\lib\win64;$(MSBuildToolsPath32);$(FxCopDir);$(PAT
TH);
 参照ディレクトリ:
 $(VCInstallDir)atlmfc\lib\amd64;$(VCInstallDir)lib\amd64
 ライブラリ ディレクトリ:
 $(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKD
KDir)\lib

以上です。
CDEが、これでいいのかどうか解りません。

Cのプリプロセッサの定義:WIN32 を X64 に書き換えてみましたが、ダメです。
Eのライブラリ ディレクトリに、$(VCInstallDir)atlmfc\lib\amd64; を追記してみまし
たが、ダメです。

なお、エラーメッセージに出ているファイル uafxcw.lib はインストールされています。
C:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\amd64\uafxcw.li
b

仲澤@失業者 2017/06/05(月) 11:15:17
まず、
/D "UNICODE"は
/D "_UNICODE"の誤りではないかと考えますが、ペーストの失敗かもしれません。

それとは別に、原因を「環境」と「プロジェクトの設定」に切り分けるには、
ウィザードで生成したままのプロジェクトを X64にしてビルドしてみてはどうでしょう。
これが成功するしたならば、当該プロジェクトに誤りがあると考えられます。
失敗するならば、VSの基本的な設定に誤りがあるか、インストールに失敗か、
不足があると予測できます。

傾奇者 2017/06/05(月) 17:21:19
仲澤@失業者様
良いアドバイス有難うございます。
早速やってみました。

●新規プロジェクト”test7”
1.MFCアプリのSDIとし、以下すべてデフォルトでビルドすると、WIN32 でも x64 でもOK
OKです。
2.ところが、ウィザードの途中で、「MFCの使用方法」を、デフォルトの「共有DLLで M
FC を使用する」ではなく、「スタティック ライブラリで MFC を使用する」に変えた場
合は、WIN32 でも x64 でもエラーとなります。
VS2010に問題がありそうです。
エラーメッセージ:
1>uafxcwd.lib(afxglobals.obj) : error LNK2001: 外部シンボル "_IID_IWICImagingFac
tory" は未解決です。
1>E:\VS2010\MFC\test7\Debug\test7.exe : fatal error LNK1120: 外部参照 1 が未解決です
です。

●最初にご相談したプロジェクト”kabuki”
これは、もともと、「スタティック ライブラリで MFC を使用する」で作成したものです。
最初
。
最初の環境は Windows 7 32bit、VS2010 でした。
現在、Windows 10 64bit, VS2010 です。
”kabuki”をWIN32のままでビルドするとOKだが、x64の構成では、Release ではOK、Debug 
Debug ではエラーになるという状態です。

ややこしい状況ですが、まずは新規プロジェクトをスタティックライブラリMFCでエラー
なく作成できるようにしなければならないと思います。
ゆっくりやりますので、しばらく時間を戴きます。

有難うございました。

仲澤@失業者 2017/06/05(月) 18:01:35
そうなると、

「VS2010に付属のライブラリでは、Windows10に対応できない」

という可能性が考えられます。
VS2015ないしVS2017のCommunity版を試してみるべきかもしれません。
これらは、無料でMFCも使えます。

ITO 2017/06/06(火) 11:38:25
https://www.microsoft.com/ja-jp/dev/support/tools.aspx
ここかな?
対応はしていますね。
ただ、64BITがどこまで対応しているかは示されていないですね。

傾奇者 2017/06/06(火) 19:03:24
予備のパソコンに、Windows 10 Home の32ビット版をインストールし、Visual Studio 
2010 も入れてやってみました。
MFCアプリ、SDI プロジェクトで、ウィザードをすべてデフォルトにしたときも、「MFCの使用方法」
使用方法」を「スタティック ライブラリで MFC を使用する」に変えた場合も、どちらも正常
正常にビルドできました。

本機の Windows 10 Home 64bit 環境で、Visual Studio 2010 は32ビットで動作してい
ます。

> 「VS2010に付属のライブラリでは、Windows10に対応できない」

Windows 10 の32ビットには対応し、64ビットに対応できないということでしょうか。
念
。
念のため、本機の VS2010 をアンインストールし、再インストール(完全インストール)してやってみます
してやってみます。

傾奇者 2017/06/09(金) 17:10:04
[[解決]]
本機(Windows 10 Home 64bit)に、VS2010 を再インストールして、MFCアプリの SDIプ
ロジェクトを、ウィザード通りの場合および「スタティック ライブラリで MFC を使用す
る」に変えた場合で、スケルトンをビルドしてみました。
x64 の構成で、どちらもOKでした。

間違った判断材料を提供し、申し訳ありませんでした。

この本機の状態で、”kabuki”プロジェクトを x64 の構成でビルドすると、やはりエラ
ーとなります。
予備機(Windows 10 Home 32bit)でも、同じエラーです。

よって、”kabuki”プロジェクトに問題ありと考えます。

VS2017 Community版もインストールしてみました。
”kabuki”プロジェクトを読み込むと、ソリューション エキスプローラに
「kabuki(利用不可)、プロジェクト ファイルはアンロードされました。」
と表示され、何もすることが出来ません。
VS2010プロジェクトからの自動変換機能は働かないようです。

今後やることは、”kabuki”プロジェクトをゼロからスタートして、少しずつコードを書き
き足しながら、x64構成でビルドしていこうと思います。
エラーが出たときに書き足したコードが原因という判断をしようと思います。

数ヶ月かかりそうなので、この質問は一旦解決とします。

有難うございました。

傾奇者 2017/06/10(土) 08:47:12
追記です。

VS2017 Community のインストールが不完全でした。
MFC がオプションになっていることに気づかずインストールしていませんでした。
MFC を追加インストールしたら、プロジェクト”kabuki”を読み込みましたが、ビルドす
ると次のエラーとなりました。

・・・\kabuki\targetver.h(19): fatal error C1083: include ファイルを開けません。'SDKDDKVer.h':No such file or directory

targetver.h 
'SDKDDKVer.h':No such file or directory

targetver.h は自分で入れたものではなく、おそらく VS2008 から VS2010 に移行すると
き自動的に入ったと思われます。

VS2017 Community の存在を知らなかったので、この質問の収穫です。
教えて戴いて感謝申し上げます。

VS2017 Community を使って、”kabuki”の内容をゼロからコーディングして行きます。

追加発言
発言される前に「使用上の注意」を必ずお読み下さい。

■ お名前(必須)
  
■ メールアドレス(省略可、半角で入力)
  
■ ホームページアドレス(省略可、半角で入力)
  
■ 発言(エラー時再送信禁止)
  ←解決時は質問者本人がここをチェックしてください。