0

CL.exe を使用してコマンド ラインからビルドできるようにする必要がある、Visual Studio 2010 で開発された大規模な VC++ プロジェクトがあります。IDE では、プロジェクトは正常にビルドされますが、コマンド ラインではビルドできませんでした。

私は主にリンカのエラーに対処し、1 つにまとめました。

LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup
C:\<path_to>\Debug\LargeProject.exe : fatal error LNK1120: 1 unresolved externals

IDE のビルド時に IDE から呼び出される正確なコマンド ライン引数を示す「LargeProject.log」というファイルがデバッグ フォルダにありました。役立つ場合は、ここにリストしました。

(いくつかの更新については、この質問の下部にある編集メモを参照してください)

CL.exe /c /Zi /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _WINDOWS /D _DEBUG /D _MBCS /D _AFXDLL /Gm- /EHa /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yc"StdAfx.h" /Fp"Debug\LargeProject.pch" /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt "Source Files\stdafx.cpp" /wd4482 > testDump.txt
CL.exe /c /Zi /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _WINDOWS /D _DEBUG /D _MBCS /D _AFXDLL /Gm- /EHa /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"Debug\LargeProject.pch" /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt <list of all source files except the following> /wd4482 > testDump.txt
CL.exe /c /Zi /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _WINDOWS /D _DEBUG /D _MBCS /D _AFXDLL /Gm- /EHa /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"Debug\LargeProject.pch" /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt "Source Files\LargeProject.cpp" /wd4482 > testDump.txt
rc.exe /D _DEBUG /D _AFXDLL /l"0x0409" /I"Debug\\" /nologo /fo"Debug\LargeProject.res" LargeProject.rc > testDump.txt
rc.exe /nologo /fo"Debug\LargeProject.exe.embed.manifest.res" "Debug\LargeProject_manifest.rc" > testDump.txt
link.exe /ERRORREPORT:PROMPT /OUT:"C:\<path_to>\Debug\LargeProject.exe" /INCREMENTAL /NOLOGO <list of libraries used> /MANIFEST /ManifestFile:"Debug\LargeProject.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\<path_to>\Debug\LargeProject.pdb" /SUBSYSTEM:WINDOWS /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\<path_to>\Debug\LargeProject.lib" /MACHINE:X86 "Debug\LargeProject.res" > testDump.txt
// note that I don't run any of the commands below because the above command
//   threw an error.
mt.exe /nologo /verbose /out:"Debug\LargeProject.exe.embed.manifest" /manifest "Debug\LargeProject.exe.intermediate.manifest" "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\Include\Manifest\dpiaware.manifest" > testDump.txt
rc.exe /nologo /fo"Debug\LargeProject.exe.embed.manifest.res" "Debug\LargeProject_manifest.rc" > testDump.txt
link.exe /ERRORREPORT:PROMPT /OUT:"C:\<path_to>\Debug\LargeProject.exe" /INCREMENTAL /NOLOGO <list of libraries used> /MANIFEST /ManifestFile:"Debug\LargeProject.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\<path to>\Debug\LargeProject.pdb" /SUBSYSTEM:WINDOWS /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\<path_to>\Debug\LargeProject.lib" /MACHINE:X86 "Debug\LargeProject.res" > testDump.txt

ご覧のとおり、これらを (エラーが発生するまで) 順番に実行し、内容を testDump.txt にダンプしました。最初の link.exe コマンドの後の testDump.txt の内容は次のとおりです。

LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup
C:\<path_to>\Debug\LargeProject.exe : fatal error LNK1120: 1 unresolved externals

コマンドラインでこのエラーが発生していることに混乱していますが、IDE からではなく、おそらくこれらのコマンドをバックグラウンドで実行しているだけです。また、コマンド プロンプト ウィンドウから vcvars32.bat ファイルを実行したので、ローカル環境変数の問題ではないことにも注意してください。

編集:msvcrt.libリンクコマンドでライブラリのリストに 追加しようとしました。これにより、新しいリンカー エラーが発生しました。

msvcrt.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
C:\<path_to>\Debug\LargeProject.exe : fatal error LNK1120: 1 unresolved externals

これは、プロジェクトで適切なエントリ ポイントが定義されていないことを意味すると読みました。つまり、アプリケーションのエントリ ポイントとして機能する WinMain() 関数がプロジェクトに存在する必要があります。それは論理的に思えますが、私はその機能を見つけていません。繰り返しますが、プロジェクトは IDE で正常にコンパイルおよびリンクされます。おそらく、これらのコマンドを取得したログ ファイルは、とにかく IDE が行っていたことを単にリストしているだけです。

他にも CRT ライブラリがあるようです。を試しmsvcprt.libましたが、何かを追加する前と同じエラー メッセージが表示されました。存在する他msvcmrt.libの同様の .lib ファイルはmsvcmrtd、、、、、およびです。これらのライブラリ ファイルの違いは何ですか? また、使用するライブラリ ファイルをどのように選択しますか?msvcprtdmsvcrtdmsvcurtmsvcurtd

4

1 に答える 1

0

私は同じエラーがあり、それを修正する方法を知っています。

あなたのプロジェクトでは、あなたは非GUIプロジェクトを選択します:それは間違いであり、それを修正するために選択します(私は正確な名前を知りません、私はフランス語でVSを使用します)

option->Link options->System->Sub-système=Windows 

そしてそれはうまくいくはずです

于 2013-08-30T06:45:52.943 に答える