"Игнорирование неизвестного параметра /NODEFAULTLIB:LIBCMTD"
Все еще страдаю от основной компиляции, как подробно описано здесь, но у меня есть конкретный побочный вопрос об использовании /NODEFAULTLIB.
Я пытался использовать этот параметр /NODEFAULTLIB:LIBCMTD для решения проблемы компоновщика, когда один из проектов в решении использует /MTd (LIBCMTD.LIB) вместо /MDd MSVCR90D.DLL.
К сожалению, как вы, вероятно, догадываетесь по названию этого поста, я, кажется, не правильно его использую. После создания решения я вижу это предупреждение в трех местах:
1>cl : Command line warning D9002 : ignoring unknown option '/NODEFAULTLIB:LIBCMTD'
Я использую Visual Studio 2008 Standard SP1 в Windows XP Professional SP3. Я добавляю этот переключатель, щелкая правой кнопкой мыши по проблемному проекту, выбирая свойства, раскрывая "Свойства конфигурации", расширяя список 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 распознать команду и перестать ее игнорировать?
Спасибо, Алекс
2 ответа
В свойствах проекта вы найдете: Свойства конфигурации -> Linker -> Input ->
'Ignore All Default Libraries'
'Ignore Specific Default Libraries' <-- this is I suppose of interest for you
вы можете попробовать добавить туда libc;libcmtd;libcd, но я никогда не пробовал, правильная компиляция всех библиотек в одной конфигурации
Эта опция задокументирована здесь. На первый взгляд кажется, что вы используете его правильно сейчас, когда вы используете его на странице компоновщика, а не на странице C++, но я подозреваю, что вам может не хватать того, что вам нужно включить .lib
в имени файла, например:
/NODEFAULTLIB:LIBCMTD.LIB
Я думаю, что если вы удалите эту опцию и посмотрите на ошибки компоновщика, которые вы получите, он скажет вам точный синтаксис, который вам нужен. Тем не менее, лучшим решением будет просмотреть все отдельные библиотеки и библиотеки в этом проекте и выяснить, какие из них используют другую библиотеку времени выполнения. Лучше исправить источник проблемы, чем обойти ее позже.