Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компиляция в Visual Studio с ключом /MT
Форум на CrossPlatform.RU > Разработка > Инструменты разработчика
AD
При компиляции dll использую ключ /MT (Runtime library: Multi-threaded).
При линковании возникают подобные ошибки:
Linking...
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _malloc already defined in LIBCMT.lib(malloc.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _free already defined in LIBCMT.lib(free.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _realloc already defined in LIBCMT.lib(realloc.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _exit already defined in LIBCMT.lib(crt0dat.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _fflush already defined in LIBCMT.lib(fflush.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _getenv already defined in LIBCMT.lib(getenv.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _memmove already defined in LIBCMT.lib(memmove.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: __errno already defined in LIBCMT.lib(dosmap.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _strncmp already defined in LIBCMT.lib(strncmp.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _isspace already defined in LIBCMT.lib(_ctype.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _isalnum already defined in LIBCMT.lib(_ctype.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _tolower already defined in LIBCMT.lib(tolower.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _strchr already defined in LIBCMT.lib(strchr.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: __tzset already defined in LIBCMT.lib(tzset.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _isupper already defined in LIBCMT.lib(_ctype.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _isalpha already defined in LIBCMT.lib(_ctype.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _isdigit already defined in LIBCMT.lib(_ctype.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: __control87 already defined in LIBCMT.lib(ieee87.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: __clearfp already defined in LIBCMT.lib(ieee87.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: __close already defined in LIBCMT.lib(close.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _fclose already defined in LIBCMT.lib(fclose.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: __lseeki64 already defined in LIBCMT.lib(lseeki64.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: __write already defined in LIBCMT.lib(write.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: __get_osfhandle already defined in LIBCMT.lib(osfinfo.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: __open_osfhandle already defined in LIBCMT.lib(osfinfo.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _wcslen already defined in LIBCMT.lib(wcslen.obj)
MSVCRT.lib(MSVCR80.dll) : error LNK2005: _strrchr already defined in LIBCMT.lib(strrchr.obj)
MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
   Creating library ..\..\Bin\Release\KeyGenerationBlock\KeyGenerationBlock_s.lib and object ..\..\Bin\Release\KeyGenerationBlock\KeyGenerationBlock_s.exp
LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
..\..\Bin\Release\KeyGenerationBlock\KeyGenerationBlock_s.dll : fatal error LNK1169: one or more multiply defined symbols found
Results
         
Build log was saved at "file://d:\Projects\Win32\Obj\Release\KeyGenerationBlock\BuildLog.htm"
KeyGenerationBlock_s - 30 error(s), 1 warning(s)

Как отключить ненужный уже MSVCRT? Заранее благодарен.
Litkevich Yuriy
а ты на QtCentre все про это дело прочитал, ни чего не упустил?
AD
Цитата(Litkevich Yuriy @ 3.2.2009, 12:29) *
а ты на QtCentre все про это дело прочитал, ни чего не упустил?

Ты про что? :) При чем здесь вообще Qt? Если ты про сборку Qt, то при сборке я все аккуратненько сделал. Сборка завершилась удачно. Но она в данных ошибках не при чем! :)
Litkevich Yuriy
Цитата(AD @ 3.2.2009, 15:33) *
При чем здесь вообще Qt?
хех, я не обратил внимание на название форума. :)
AD
Нашел решение проблемы. При установке ключа /MT также следует сделать следующее:
В свойствах проекта, вкладке C/C++ в подвкладке Advanced установить флаг /Zl (Omit Default Library Names).
Все ошибки сразу же пропадут.

Но есть тогда такой вопрос: как полностью избавиться от зависимости от MSVCR80.dll? Установка указанных ключей избавило от MSVCP80.dll, что еще надо поставить, чтобы и эту dll вовнутрь спрятать? :)
Litkevich Yuriy
AD, прочитай в прогорг вики статью, может, что-то найдешь, она отличается от той, что на QtCentre, вроде как универсальностью

Хоть она и ориентирована на Qt, но может ты, как пользователь студии, что-то заметишь.
AD
Цитата(Litkevich Yuriy @ 3.2.2009, 13:58) *
AD, прочитай в прогорг вики статью, может, что-то найдешь, она отличается от той, что на QtCentre, вроде как универсальностью

Хоть она и ориентирована на Qt, но может ты, как пользователь студии, что-то заметишь.

Так именно по этой статье я и делал статическую сборку (ведь именно на нее ты ссылку и давал)! ;) Но опять же к данной теме не имеет отношения. Там в файлах заметить нужный флаг - это мазохизм....
AD
Кто-нибудь, помогите, пожалуйста, очень нужно!!!
kuler
Цитата(AD @ 3.2.2009, 13:37) *
Но есть тогда такой вопрос: как полностью избавиться от зависимости от MSVCR80.dll?

Не уверен в своем ответе, но тем не менее выскажусь - видимо нужно найти MSVCR80.lib.
AD
Цитата(kuler @ 4.2.2009, 11:34) *
Не уверен в своем ответе, но тем не менее выскажусь - видимо нужно найти MSVCR80.lib.

Таковой вообще нет! :mellow:
kuler
Цитата(AD @ 4.2.2009, 17:09) *
аковой вообще нет!

где нет? в мире она наверно есть. А в честь чего она вообще используется? обычно нужные либы подрубаются путем настройки в свойствах проекта linker->input.
AD
Цитата(kuler @ 4.2.2009, 17:46) *
где нет? в мире она наверно есть. А в честь чего она вообще используется? обычно нужные либы подрубаются путем настройки в свойствах проекта linker->input.


Где подрубается, я знаю! :) Но в Visual Studio ее нет впринципе. Может по другому называется? <_<
kuler
а зачем ее отрубать?

и в linker->input есть inherit values может с ними чо поделать?
AD
Цитата(kuler @ 4.2.2009, 18:52) *
а зачем ее отрубать?

и в linker->input есть inherit values может с ними чо поделать?

:blink: я твоя не понимать....
Мне необходимо узнать какой флажок нужно установить. Напрямую (т.е. ручками) эту библиотеку, msvcrt.lib, подключать не следует - будут ошибки и много. А вот каким флагом это регулируется?
kuler
вообще поиск в гугле выявил схожие проблемы, но вроде решения я не нарыл
kalombo
Не знаю как начать, поэтому опишу всё, что я сделал=). Хотел я, чтобы собранные в MSVS Qt-приложения зависели только от Qt-шных библиотек, наткнулся на этот топик, а в нём на ссылку на ПрогОрг. Сделал по статье, зависимость осталась, но только от одной библиотеки - MSVCR90.dll. Погуглил, нашел такое решение
Project Property->Configuration properties->c/c++->code generation->runtime library->MT
Project Property->Linking->Manifest File->Generating Manifest->NO
Только размер приложения увеличился на 40 килобайт. Но думаю это пустяки=) Буду рад, если мой пост кому-то поможет.
Litkevich Yuriy
Цитата(kalombo @ 5.2.2009, 20:54) *
а в нём на ссылку на ПрогОрг.
у них еще обсуждение было.
AD
Забавно у кое-кого получилось. :)
Вопрос: что еще следует указать помимо флага /MT, для того, чтобы не было зависимости от MSVRT*.dll
Ответ: надо указать флаг /MT!

Большое человеческое спасибо! :D

* - версия Visual Studio

Юра, обсуждение было лишь к тому, как лучше отключить манифесты. Один вариант - просто убрать из строки подключения. Второй вариант - подгружать манифест только в том случае, если в настройках проекта пользователь НЕ ЗАПРЕТИЛ его подгружать.
kuler
кстати зависимость может быть изза того что сама qt так собрана - с ней.
AD
Цитата(kuler @ 13.3.2009, 11:21) *
кстати зависимость может быть изза того что сама qt так собрана - с ней.

Вроде как отключил эту зависимость и пересобрал Qt.
kuler
Цитата(AD @ 13.3.2009, 11:32) *
Вроде как отключил эту зависимость и пересобрал Qt

а она у тебя не так зависит?
AD
Цитата(kuler @ 13.3.2009, 12:37) *
а она у тебя не так зависит?

Неа, не так.
Нажмите для просмотра прикрепленного файла
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2022 IPS, Inc.