4

我想在 Visual Studio 2008 中编译和链接我的项目作为调试项目 (MTd)。该项目包括几个外部 dll,其中一个 dll 与可用的非调试版本(MD 和 MT 版本)一样。现在,如果我尝试链接我的项目,它要么说重新声明 LIBCMT.lib 和 LIBCMTD.lib 中的东西,要么如果我尝试不允许非调试版本 (/NODEFAULTLIB:LIBCMT) 它缺少符号。

现在我可以使用所有外部库的 MT 版本,但由于同样的错误,我仍然无法将其编译并链接为 MTd 版本来调试我的项目。

另一种方法(在我看来)是允许重新定义,我认为这是可能的@gnu 编译器/链接器,但我在 Visual Studio 的 c++ 中找不到任何关于此的信息。

关于如何处理这个问题的任何想法?(请记住:无法将外部 dll 编译为调试 dll)

作为一个额外的一般性问题:是否甚至可以创建一个使用非调试 dll 的调试项目?

4

1 回答 1

4

看起来“正确”的解决方案是使用相同的参数(MTd)重建所有外部库。正如我所说,这是不可能的。我通过不忽略任何默认库解决了这个问题。相反,我找到了我正在寻找的参数。在链接器选项中 - 我添加的附加行:/FORCE- 它忽略了符号的重新定义。这不是一个完美的解决方案,它可能不适用于任何项目 - 但总比没有好......

此外,我必须将 Incremental Link 设置为 NO,否则 embed.manifest 将无法正确构建(尽管我已经阅读过这也可能是反病毒问题)。

于 2013-08-07T08:39:34.973 回答