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