1

我正在将 .NET 支持集成到我们的 C++ 应用程序中。
这是一个老式的 MFC 应用程序,有 1 个额外的文件使用“/clr”选项编译,该选项引用 CWinFormsControl。

我不允许删除链接器标志“/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 以您的风格(SDI/MDI/对话框)创建一个准系统的 MFC 应用程序,然后使用您的依赖

于 2008-08-14T00:32:25.693 回答
1

我是如何解决的:

  1. 与“/FORCE:MULTIPLE /verbose”(链接正常)链接并将输出放在一边。
  2. 与“/NODEFAULTIB /verbose”链接并在上一步的输出中跟踪所有未解决的问题,并逐个添加库。
  3. 这导致双打:“AAA.lib:XXX 已在 BBB.lib 中定义”
  4. 然后我终于明白了:使用 /MD 重新编译托管和非托管单元并链接到(除其他外):mscoree.lib msvcmrt.lib mfcm80d.lib

混合 /MT(非托管)和 /MD(托管)被证明是个坏主意:需要不同的(重叠)库。

@ajryan:Dependcy Walker 只告诉我使用了哪些 dll,而不是在链接时链接到哪些库。(例如 msvcmrt.lib ?)我想。

感谢您的回答!

于 2008-08-14T11:01:33.623 回答