При компиляции 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)
а ты на QtCentre все про это дело прочитал, ни чего не упустил?
Нашел решение проблемы. При установке ключа /MT также следует сделать следующее:
В свойствах проекта, вкладке C/C++ в подвкладке Advanced установить флаг /Zl (Omit Default Library Names).
Все ошибки сразу же пропадут.
Но есть тогда такой вопрос: как полностью избавиться от зависимости от MSVCR80.dll? Установка указанных ключей избавило от MSVCP80.dll, что еще надо поставить, чтобы и эту dll вовнутрь спрятать?
AD, прочитай в http://prog.org.ru/wiki/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_Qt_%D0%B1%D0%B5%D0%B7_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9_%28MS_Visual_Studio%29 статью, может, что-то найдешь, она отличается от той, что на QtCentre, вроде как универсальностью
Хоть она и ориентирована на Qt, но может ты, как пользователь студии, что-то заметишь.
Кто-нибудь, помогите, пожалуйста, очень нужно!!!
а зачем ее отрубать?
и в linker->input есть inherit values может с ними чо поделать?
вообще поиск в гугле выявил схожие проблемы, но вроде решения я не нарыл
Не знаю как начать, поэтому опишу всё, что я сделал=). Хотел я, чтобы собранные в 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 килобайт. Но думаю это пустяки=) Буду рад, если мой пост кому-то поможет.
Забавно у кое-кого получилось.
Вопрос: что еще следует указать помимо флага /MT, для того, чтобы не было зависимости от MSVRT*.dll
Ответ: надо указать флаг /MT!
Большое человеческое спасибо!
* - версия Visual Studio
Юра, обсуждение было лишь к тому, как лучше отключить манифесты. Один вариант - просто убрать из строки подключения. Второй вариант - подгружать манифест только в том случае, если в настройках проекта пользователь НЕ ЗАПРЕТИЛ его подгружать.
кстати зависимость может быть изза того что сама qt так собрана - с ней.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)