“忽略未知选项/ NODEFAULTLIB:LIBCMTD”

时间:2012-07-16 21:24:40

标签: c++ visual-studio-2008 libcmtd

仍然经历了详细over here的重大编译,但我对使用/ NODEFAULTLIB有一个特定的问题。

我一直在尝试使用这个/ NODEFAULTLIB:LIBCMTD开关来解决链接器问题,其中解决方案中的一个项目使用/ MTd(LIBCMTD.LIB)而不是/ MDd MSVCR90D.DLL。

不幸的是,正如你可能会猜到这篇文章的标题,我似乎没有正确使用它。在构建解决方案后,我在三个地方看到了这个警告:

1>cl : Command line warning D9002 : ignoring unknown option '/NODEFAULTLIB:LIBCMTD'

我在Windows XP Professional SP3上运行Visual Studio 2008 Standard SP1。我通过右键单击麻烦的项目,选择属性,展开“配置属性”,展开C / C ++列表,选择“命令行”,然后在“其他选项”中输入/ NODEFAULTLIB:LIBCMTD来添加此开关字段。

我正在网上的其他地方读到这应该是一个链接器设置,而不是C / C ++设置,所以我也尝试在Configuration Properties-> Build Events-> Pre-Link Event-下输入它>命令行,虽然这给了我自己的警告但没有从编译产生任何不同的结果:

1>The filename, directory name, or volume label syntax is incorrect. 1>Project : error PRJ0019: A tool returned an error code from "Performing Pre-Link Event..."

所以大家...... / NODEFAULTLIB开关怎么样?我不明白这里?如何让VS2008识别命令并停止忽略它?

谢谢, -Alex

2 个答案:

答案 0 :(得分:4)

在项目属性中,您会找到:配置属性 - >链接器 - >输入 - >

 'Ignore All Default Libraries'
 'Ignore Specific Default Libraries' <-- this is I suppose of interest for you

你可以尝试把libc; libcmtd; libcd放在那里,但我从未尝试过,在同样的配置下编译所有的lib是正确的方法

答案 1 :(得分:1)

此选项记录在案here。从表面上看,你现在正在使用它,因为你在链接器页面而不是C ++页面上使用它,但我怀疑可能缺少的是你需要的在文件名中包含.lib,例如:

/NODEFAULTLIB:LIBCMTD.LIB

我认为如果您删除此选项并查看链接器错误,那么它将告诉您所需的确切语法。但更好的解决方案是查看此项目中的所有单个库和dll,并找出哪些库正在使用其他运行时库。最好解决问题的根源而不是稍后解决问题。