3

Visual Studio 2010でコンパイルするために、CppUnitをダウンロードしてコンパイルしました。

変換後、CppUnitLibrariesをロードすると、cppunit.libとcppunit_dll.lib/dllが得られます。ヘッダーとライブラリをディレクトリにコピーした後、このコマンドを実行して多くのエラーを取得します。

私は次のようにライブラリの競合を見つけました

LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library

ただし、次のコマンドは機能しないようです。

cl main.cpp complex.cpp testset.cpp /I"C:\CppUnit\include" /link /libpath:"C:\CppUnit\lib" cppunit.lib /NODEFAULTLIB:library

それらの何が問題になっていますか?

これは私がコンパイル/リンクに使用したコマンドです。

cl main.cpp complex.cpp testset.cpp /I"C:\CppUnit\include" /link /libpath:"C:\CppUnit\lib" cppunit.lib

これはVS2010からのエラーメッセージです。

cppunit.lib(TestResult.obj):エラーLNK2038:'_ITERATOR_DEBUG_LEVEL'の不一致が検出されました:

..。

node @@@ Z)LIBCMT.lib(typinfo.obj)ですでに定義されています
リンク:警告LNK4098:defaultlib'MSVCRTD'は他のライブラリの使用と競合します。/ NODEFAULTLIB:libを使用します
ラリー
main.exe:致命的なエラーLNK1169:1つ以上の複数定義されたシンボルが見つかりました

追加した

CppUnitは古いバージョンのプロジェクトファイル(dsw)を提供しているため、ファイルを手動で2010ソリューションプロジェクトに変換する必要がありました。

エラーの場合、コンパイル用の/MDが欠落していることが問題の原因でした。その他のコンパイル警告については、/EHscパラメーターを追加する必要がありました。

cl /EHsc /MD /c /I"./CppUnit/include" main.cpp testset.cpp complex.cpp
link /libpath:"CppUnit/lib" main.obj testset.obj complex.obj cppunit.lib /out:cpptest_static.exe
link /libpath:"CppUnit/lib" main.obj testset.obj complex.obj cppunit_dll.lib /out:cpptest_dynamic.exe
4

3 に答える 3

2

CppUnitをデバッグモードでコンパイルしたようですが、現在のファイルをリリースモードでコンパイルしています。それらを混ぜてはいけません、そしてそれはコンパイラがあなたに言っていることです。

これを解決する最も簡単な方法は、おそらくVSプロジェクトを使用し、CppUnitのコンパイルに使用されたプロジェクトに対してその設定を確認することです。

編集時:ランタイムライブラリも混合しています(たとえば、両方が/ MDスイッチ(マルチスレッドDLL)を使用してコンパイルされていることを確認してください)

于 2011-01-11T14:47:47.150 に答える
1

CPPUNITプロジェクトをVisualStudio2010にアップグレードし、手動で修正する必要がありました。ビルドの問題は、出力ファイルがコピーされる最終アクションにありました。

cppunit_dllプロジェクトの場合、カスタムコマンドの1つは次のとおりです。

copy "$(TargetPath)" ..\..\lib\$(TargetName).dll
copy "$(TargetDir)$(TargetName).lib" ..\..\lib\$(TargetName).lib

$(TargetName)は「cppunit_dll」です。

これは、実際に構築しているものと競合します。リンカーオプションを見ると、出力ファイル名が「cppunitd_dll.dll」であることがわかります。

私が使用した解決策は、ConfigurationPropertys \ Generalに移動し、「ターゲット名」を$(ProjectName)から「cppunitd_dll」に変更することです。

私はcppunitプロジェクトのために同様の解決策をとらなければなりませんでした。

于 2011-07-06T06:38:38.150 に答える
0

SVNからソースコードをチェックアウトした後、cppunitフォルダーのINSTALL-VS.Net2008.txtを読んでください。

基本的に:examplesフォルダーの下にVisualStudioソリューションがあります。

そうは言っても...変換後、vs2010でエラーなしでビルドすることはできません。'cmd.exe'が失敗し、dllのコピーに失敗します。

于 2011-06-05T02:12:04.630 に答える