仍然在经历一个主要的编译作为详细的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 Studio2008Standard SP1。通过右键单击麻烦的项目,选择属性,展开"Configuration Properties",展开C/C++列表,选择"Command Line",并在"Additional options“字段中输入/NODEFAULTLIB:LIBCMTD,我添加了这个开关。
我在网上的其他地方读到,这应该是一个链接器设置,而不是C/C++设置,所以我也尝试在Configuration Properties->Build Events->Pre-Link Event->Command Line下输入它,尽管这会给我自己的警告,但不会从编译中产生任何不同的结果:
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
发布于 2012-07-17 05:45:29
在项目属性中可以找到:配置属性->链接器-> Input ->
'Ignore All Default Libraries'
'Ignore Specific Default Libraries' <-- this is I suppose of interest for you您可以尝试将libc;libcmtd;libcd放入其中,但我从未尝试过,在相同的配置下编译所有libc是正确的方法
发布于 2012-07-17 06:18:51
此选项已记录在here中。从表面上看,您现在似乎正确地使用了它,因为您在链接器页面而不是C++页面上使用它,但我怀疑可能缺少的是您需要在文件名中包括.lib,例如:
/NODEFAULTLIB:LIBCMTD.LIB我认为,如果您删除此选项并查看您得到的链接器错误,那么它将告诉您所需的确切语法。不过,一个更好的解决方案是查看此项目中的所有单独的库和all,并找出哪些库正在使用其他运行时库。修复问题的根源比以后解决它更好。
https://stackoverflow.com/questions/11512795
复制相似问题