LNK2005とLNK1169を無視する方法は?
-
28-09-2019 - |
質問
したがって、外部ライブラリを使用するVisual Studio 2010プロジェクトがあり、LNK2005なしでコンパイルするためには、リンカー設定のライブラリの順序でアラウンドをジャグリングする必要がありました。
リリースモードで正常にコンパイルするようにしましたが、何らかの理由で、デバッグにLNKエラーなしでコンパイルすることができませんでした。
一般的にLNK2005を無視し、リンカーに最初に出会うものを単純に使用するように指示する方法はありませんか?
ありがとう!
//編集:特定の問題のエラー出力の一部を次に示します。しかし、私はすでにそれをさまざまな方法で解決しようとしました。各ソリューションは私に異なるリンカーの問題を与えてくれました。したがって、LNK2005を無視する一般的なソリューションを探しています
Error 7 error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in Libcmtd.lib(typinfo.obj)
...\msvcprtd.lib(MSVCP100D.dll)
Error 8 error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in Libcmtd.lib(typinfo.obj)
...\msvcprtd.lib(MSVCP100D.dll)
Error 9 error LNK2005: _exit already defined in Libcmtd.lib(crt0dat.obj)
...\msvcprtd.lib(MSVCP100D.dll)
Error 10 error LNK2005: __invalid_parameter already defined in Libcmtd.lib(invarg.obj)
...\msvcprtd.lib(MSVCP100D.dll)
...
Error 37 error LNK1169: one or more multiply defined symbols found
解決
リンカーオプション /フォース(プロジェクトプロパティの[リンカー]タブでフォースファイル出力)を試すことができます。これにより、リンカーはそのようなエラーが発生した場合でもEXE/DLLを作成します。しかし、このexeがまったく機能しているかどうかを調べるために、あなたに任されています。結局のところ、私はこの戦略をお勧めしません。
リンカーエラーは解決するのが面倒な場合がありますが、通常、プロジェクトを移行またはセットアップした後にのみ行う必要があります。これにはかなり時間がかかるかもしれません - 時には1日以上かかったことがありますが、適切に行う必要があります。
他のヒント
リンカーエラーを絶対に無視してはなりません! リンカーは、複数の場所で定義されているシンボルについて混乱していることを伝えています。定義はどこから取るべきですか?あなたは本当にそれをarbitrary意的にしたいですか?コードを変更し、リンカーがランダムに他の定義を実行することを決定した場合、コードが突然破損する可能性がありますか?
ツールと戦う代わりに、コードを修正して、エラーなしでコンパイルしてリンクします。 このMSDNの記事 詳細については、リンクとともに、修正に関する情報があります。