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

我不允许删除链接器标志“/NODEFAULTLIB”。
(我们有自己的构建管理系统,而不是 Visual Studio 的。)
这意味着我必须指定所有必需的库:VC 运行时和 MFC。

其他编译器选项包括“/MD”

旁边:我无法使用链接器标志“/FORCE:MULTIPLE”,只需添加 一切:
我正在寻找一组不重叠的库。

有帮助吗?

解决方案 3

我是如何解决的:

  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,而不告诉我链接时链接到哪些库。(例如。我想。

感谢您的回答!

其他提示

至少:

mscoree.lib msvcrt.lib mfc90.lib(适当调整版本)

并从那里迭代。

使用 AppWizard 按照您的风格(SDI / MDI / 对话框)创建一个简单的 MFC 应用程序,然后 依赖你.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top