この質問は何度も提起されてきましたが、VisualStudioは私に挑戦することをやめません。
自給自足である必要がある、つまりサードパーティのライブラリに依存しないアプリケーションがあります。MT(d)
これが、コード生成フラグを使用してすべてを静的に構築する理由です。
Qt
アプリは、、、およびzlib
に依存します。これらのライブラリはすべて、。を使用して静的ライブラリとして構築されました。このアプリは関連するコードも使用しているため、リンクする必要があります。OpenSSL
DCMTK
MT(d)
MFC
MFCは経由で含まれています
#include <afxwin.h>
これがすべてのファイルの最初のインクルードであるべきだとどこかで読みましたが、それが本当かどうかはわかりません。とにかく、その行はすべてのファイルに含まれているわけではなく、1つのファイルだけに含まれています。
リンク関連のエラーは次のとおりです。
Error 24 error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) already defined in LIBCMTD.lib(delete2.obj) uafxcwd.lib
Error 22 error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj) uafxcwd.lib
Error 23 error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmtd.lib(newaop.obj) uafxcwd.lib
Error 21 error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj) uafxcwd.lib
これがリンカーの出力です。
多くのサイトの多くのスレッドと、MSDNのKBからのこの記事を読みました。しかし、MFCライブラリはCRTの前にリンクする必要があると彼ら全員が言い続けているので、彼らは私を助けませんが、リンクの順序を変更する方法を見つけることができません。
どんな助けでも大歓迎です。
編集1 :このスレッドのトリックを使用すると、実際に問題は解決しますが、ここで何が問題になっているのかを知りたいと思います。
編集2:Windows7およびQt4.6.3でのVisualStudio2008SP1の使用