2

仍然在经历这里详述的主要编译,但我有一个关于使用 /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++ 设置,所以我也尝试在配置属性->构建事件->预链接事件->命令行下输入它,不过这给了我自己的警告,而没有从编译中产生任何不同的结果:

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 识别命令并停止忽略它?

谢谢,-亚历克斯

4

2 回答 2

5

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

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

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

于 2012-07-16T21:45:29.277 回答
2

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

/NODEFAULTLIB:LIBCMTD.LIB

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

于 2012-07-16T22:18:50.710 回答