仍在经历此处详述的主要编译,但我有一个关于 /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 识别命令并停止忽略它?
谢谢,-亚历克斯
经过漫长的过程重命名项目后,我的DLL项目将不会在调试模式下构建(发布版本工作):
MSVCRTD.lib(msvcr90d.dll) : error LNK2005: _CrtDbgReportW already defined in LIBCMTD.lib(dbgrpt.obj)
Run Code Online (Sandbox Code Playgroud)
该项目及其依赖的五个静态库设置为使用"多线程调试(/ MTd)"(在C/C++下|代码生成|运行时库).我相信LIBCMTD.lib是用于多线程调试的,但是什么是MSVCRTD.lib,以及可能导致此错误的原因是什么?
如果它有所不同,此DLL适用于Windows CE.