"Игнорирование неизвестного параметра /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

Я думаю, что если вы удалите эту опцию и посмотрите на ошибки компоновщика, которые вы получите, он скажет вам точный синтаксис, который вам нужен. Тем не менее, лучшим решением будет просмотреть все отдельные библиотеки и библиотеки в этом проекте и выяснить, какие из них используют другую библиотеку времени выполнения. Лучше исправить источник проблемы, чем обойти ее позже.

Другие вопросы по тегам