Visual Studio 2008コマンドラインツールを使用して、Windows上のPocoと呼ばれるC++ライブラリに対して静的にリンクしようとしています。
私は自分のプログラムを以下で構築します:
cl /I..\poco\lib /c myapp.cpp
link /libpath:..\poco\lib myapp.obj PocoNet.lib
これにより、実行時にPocoNet.dllとPocoFoundation.dllを必要とするexeが生成されます。
私はWindowsでのリンクについて読んで時間を費やし、動的にリンクcl /MT
しながら、標準ライブラリに対して静的にリンクすることを学びました。cl /MD
指定しようとしまし/MT
たが、何も変わらないようです。私のアプリにはまだPocoDLLが必要です。(これ/MT
がデフォルトの動作だと思います。)
下を見ると..\poco\lib
、PocoNetmt.libもあることがわかりましたが、PocoNet.libの代わりにそれを指定すると、多数のLNK2005エラー(「定義済み」)が発生しました。
msvcprt.lib(MSVCP90.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) already defined in exp.obj
次に、さらにフラグを重ねてみました。
/verbose:lib
:何が起こっているかを確認するのに役立ちます/Zl
:以前と同じ結果/nodefaultlib:libcmt.lib /nodefaultlib:msvcprt.lib
:このエラーが発生しました:PocoFoundationmt.lib(Exception.obj) : warning LNK4217: locally defined symbol ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ (public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)) imported in function __ehhandler$??0Exception@Poco@@QAE@ABV01@@Z
ここで提案されているよう
.lib
に、完全にドロップします:上記と同じエラー
私はまた、上記のいくつかの組み合わせを試しましたが、まったく役に立ちませんでした。
手がかりがあれば大歓迎です。しかし、これらのタイプの問題をデバッグ(または学習)するのに役立つリソースへのポインターも同様に役立ちます。