Грешки при използване на многонишкови библиотеки за изпълнение с icc 14

Когато използвам флага /MT с ICC 14, получавам следните грешки:

1>  xilink: executing 'link'
1>MSVCRT.lib(MSVCR120.dll) : error LNK2005: isspace already defined in LIBCMT.lib(_ctype.obj)
1>MSVCRT.lib(MSVCR120.dll) : error LNK2005: __iob_func already defined in LIBCMT.lib(_file.obj)
1>MSVCRT.lib(MSVCR120.dll) : error LNK2005: fprintf already defined in LIBCMT.lib(fprintf.obj)
1>MSVCRT.lib(MSVCR120.dll) : error LNK2005: abort already defined in LIBCMT.lib(abort.obj)
1>MSVCRT.lib(MSVCR120.dll) : error LNK2005: free already defined in LIBCMT.lib(free.obj)
1>MSVCRT.lib(MSVCR120.dll) : error LNK2005: malloc already defined in LIBCMT.lib(malloc.obj)
1>MSVCRT.lib(MSVCR120.dll) : error LNK2005: realloc already defined in LIBCMT.lib(realloc.obj)
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __cdecl type_info::type_info(class type_info const &)" (??0type_info@@AEAA@AEBV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __cdecl type_info::operator=(class type_info const &)" (??4type_info@@AEAAAEAV0@AEBV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>D:\forgottenserver-master\vc12\x64\Release\theforgottenserver.exe : fatal error LNK1169: one or more multiply defined symbols found

Нямам представа какво причинява това и когато използвам флага /MD, всичко работи добре

Използвам ICC версия 14 с MSVC 2013 ultimate и компилирам програма за x64 с boost (компилирах тези файлове за платформата iw сам и изглежда, че работят)


person dominique120    schedule 28.06.2014    source източник
comment
Какво ще кажете за use /nodefaultlib:MSVCRT?   -  person Jonas Bötel    schedule 29.06.2014
comment
@LumpN Това реши проблема   -  person dominique120    schedule 29.06.2014
comment
Не е необходимо да посочвате /nodefaultlib:msvcrt. Ако получавате грешките, които описвате, това означава, че някои обекти във вашия линкер са били компилирани с /MT, а други са били компилирани с /MD. Не можете да смесвате и съчетавате; всички изходни файлове трябва да бъдат компилирани с една и съща опция.   -  person James McNellis    schedule 29.06.2014
comment
@JamesMcNellis Как да компилирам библиотеките, които са споменати в грешката с флага /MT?   -  person dominique120    schedule 29.06.2014


Отговори (1)


Опитайте се да посочите LIBCMT в Properties -> Linker -> Ignore Specific Default Libraries

person grisha    schedule 28.06.2014
comment
Поправянето на грешки с множествено дефинирани символи чрез игнорирането им никога не е добра идея. Смесицата от времена на изпълнение е много вероятно да доведе до фини и трудни за диагностициране грешки в паметта. - person Sneftel; 29.06.2014
comment
Казах Опитайте, а не Трябва - person grisha; 29.06.2014
comment
Ако опита, ще се получи. След това малко по-късно той ще получи срив, когато се опита да преоразмери вектор и няма да има представа защо. - person Sneftel; 29.06.2014
comment
това се казва опит :) - person grisha; 29.06.2014
comment
Така че вашият план е умишлено да го подведете, така че той да трябва да се мъчи да разбере, че умишлено сте го подвели, вместо просто да го научите на това, което трябва да знае? Това е... аз дори не. - person Sneftel; 29.06.2014
comment
решихте, че моето предложение е 100% грешно и че това трябва да доведе до неизвестни грешки и т.н. Но не е истина. Това може да доведе до такива грешки, но може и да не доведе. Не казвам, че грешите. Но трябваше просто да предупредите за възможността да имате трудни за диагностициране грешки в паметта. И грешиш за моя план. Просто казвам за възможно решение. И сега, ако опита и получи странни грешки, тогава той ще знае, че може би това е причинено от такова решение. Между другото, работи. Очакваме вашите грешки :) - person grisha; 29.06.2014