1

.NET サポートを C++ アプリケーションに統合しています。
これは昔ながらの MFC アプリケーションであり、CWinFormsControl を参照する "/clr" オプションを使用してコンパイルされた 1 つの追加ファイルがあります。

リンカー フラグ "/NODEFAULTLIB" を削除することはできません。
(Visual Studio ではなく、独自のビルド管理システムを使用しています。)
つまり、必要なすべてのライブラリ (VC ランタイムと MFC) を指定する必要があります。

その他のコンパイラ オプションには、「/MD」が含まれます

次に: リンカー フラグ "/FORCE:MULTIPLE" を使用できず、すべてを追加するだけです
。重複しないライブラリ セットを探しています。

4

3 に答える 3

1

最低限として:

mscoree.lib MSVCRT.lib mfc90.lib(バージョンを適切に調整)

そして、そこから繰り返します。

于 2008-08-13T18:07:03.413 に答える
1

AppWizard を使用して、必要最小限の MFC アプリをスタイル (SDI / MDI / dialog ) で作成し、依存関係に置きます

于 2008-08-14T00:32:25.693 に答える
1

どうやって解決したか:

  1. "/FORCE:MULTIPLE /verbose" でリンクし (リンクは問題ありません)、出力を脇に置きます。
  2. 「/NODEFAULTIB /verbose」でリンクし、前のステップの出力ですべての未解決を追跡し、ライブラリを 1 つずつ追加します。
  3. これにより、ダブルスが発生しました:「AAA.lib: XXX は BBB.lib で既に定義されています」
  4. それから私は最終的にそれを手に入れました:管理されたユニットと管理されていないユニットを /MD で再コンパイルし、(とりわけ)へのリンク: mscoree.lib msvcmrt.lib mfcm80d.lib

/MT (管理されていない) と /MD (管理されている) を混在させることは悪い考えであることが判明しました: 異なる (重複する) ライブラリが必要です。

@ajryan: Dependcy Walker は、リンク時にどのライブラリがリンクされているかではなく、どの dll が使用されているかだけを教えてくれます。(例 msvcmrt.lib ?) だと思います。

答えてくれてありがとう!

1月

于 2008-08-14T11:01:33.623 に答える