【发布时间】:2013-08-07 08:01:25
【问题描述】:
我想在 Visual Studio 2008 中编译和链接我的项目作为调试项目 (MTd)。该项目包括几个外部 dll,其中一个 dll 与可用的非调试版本一样(MD 和 MT 版本)。现在,如果我尝试链接我的项目,它要么说重新声明 LIBCMT.lib 和 LIBCMTD.lib 中的东西,要么如果我尝试不允许非调试版本 (/NODEFAULTLIB:LIBCMT) 它缺少符号。
现在我可以使用所有外部库的 MT 版本,但由于同样的错误,我仍然无法将其编译并链接为 MTd 版本来调试我的项目。
另一种方法(在我看来)是允许重新定义,我认为这是可能的 @gnu 编译器/链接器,但我在 Visual Studio 的 c++ 中找不到任何关于此的内容。
关于如何处理这个问题的任何想法? (记住:不能将外部 dll 编译为 debug-dll)
作为一个额外的一般性问题:是否甚至可以创建一个使用非调试 dll 的调试项目?
【问题讨论】:
-
您正试图在您的程序中有意使用 多个 版本的 CRT。你会得到一个用于你的 EXE 和另一个用于你的 DLL,可能更多。这是非常非常不明智的,您将在它们之间传递对象和指针时遇到重大问题。始终使用 /MD,因此程序中只有一个 CRT。
-
是的,这是不明智和必要的......因为我需要一个可调试的项目并且只有一些外部 DLL 的发布版本。对于发布版本,无论如何它都是一致的。
-
您需要与从事这些 DLL 工作的程序员交谈。当然,他们可以为您提供调试版本。您不太可能在这里找到它们。
-
您的意思是,“我不想要获得调试版本”。这肯定比花十分钟在网站上花费更多的精力。也可能要花钱,这永远无法与免费的 Q+A 网站竞争。使用 /MD 而不是 /MDd 构建并交叉手指说您没有 CRT 或分配器问题。如果 CRT 版本仍然不匹配,请降级您的 VS 版本。祝你好运。
-
你有什么问题?仍然不可能获得调试版本。如果有的话,无论如何都是免费的。没有人回答我的问题 - 那么究竟什么是免费的?我使用 /MD 和 /MDd 构建 - /MD 不会产生任何问题(当然) - 但我仍然需要调试版本。如果您想具有建设性,请尝试回答问题 - 并停止抱怨为此目的制作的网站上提出的问题。
标签: visual-studio-2008 linker visual-studio-debugging