STL и опции /MT и /MD
От: sonsen  
Дата: 19.02.08 08:45
Оценка:
Наткнулся на проблему — что stl std::vector не хочет компилиться с опцией /MT, линкер выдает сообщение:


>Compiling...
1>cl : Command line warning D9025 : overriding '/MDd' with '/MT'
1>cl : Command line warning D9025 : overriding '/W3' with '/W1'
1>stdafx.cpp
1>Compiling...
1>cl : Command line warning D9025 : overriding '/MDd' with '/MT'
1>cl : Command line warning D9025 : overriding '/W3' with '/W1'
1>STLtest.cpp
1>Linking...
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>libcpmtd.lib(stdthrow.obj) : error LNK2019: unresolved external symbol __CrtDbgReportW referenced in function "void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (?_Debug_message@std@@YAXPB_W0I@Z)
1>libcpmtd.lib(xdebug.obj) : error LNK2019: unresolved external symbol __malloc_dbg referenced in function "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z)
1>libcpmtd.lib(xdebug.obj) : error LNK2019: unresolved external symbol __free_dbg referenced in function "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z)
1>D:\VStudioProjects\STLtest\Debug\STLtest.exe : fatal error LNK1120: 3 unresolved externals
1>Build log was saved at "file://d:\VStudioProjects\STLtest\STLtest\Debug\BuildLog.htm"
1>STLtest — 4 error(s), 5 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


а вот и сама программка:

#include "stdafx.h"
#include <vector>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    vector <int> Vec;
    return 0;
}


а вот с /MD опицией все ок. Не пойму в чем дело?
Re: STL и опции /MT и /MD
От: MasterZiv СССР  
Дата: 19.02.08 08:54
Оценка:
sonsen пишет:
> #include "stdafx.h"

Выкини stdafx.h stdafx.cpp из проекта.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: STL и опции /MT и /MD
От: Кодт Россия  
Дата: 19.02.08 22:22
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Выкини stdafx.h stdafx.cpp из проекта.


Подозреваю, что эта программка — дистилляция проблемы, на которой она воспроизводится.
А в реальном коде прекомпилированный заголовок всё-таки нужен?

Нужно убедиться, что
— все файлы (в данном случае, YourMainFile.cpp и stdafx.cpp) компилируются с одинаковыми опциями — т.е. менялись опции у проекта целиком, а не у отдельных файлов
— прекомпилированный заголовок (stdafx.pch) был перестроен после того, как автор упражнялся с опциями.
Перекуём баги на фичи!
Re[3]: STL и опции /MT и /MD
От: sonsen  
Дата: 20.02.08 00:47
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, MasterZiv, Вы писали:


MZ>>Выкини stdafx.h stdafx.cpp из проекта.


К>Подозреваю, что эта программка — дистилляция проблемы, на которой она воспроизводится.

К>А в реальном коде прекомпилированный заголовок всё-таки нужен?

К>Нужно убедиться, что

К>- все файлы (в данном случае, YourMainFile.cpp и stdafx.cpp) компилируются с одинаковыми опциями — т.е. менялись опции у проекта целиком, а не у отдельных файлов
К>- прекомпилированный заголовок (stdafx.pch) был перестроен после того, как автор упражнялся с опциями.

Насколько я понял файлы stdafx.h stdafx.cpp используются для создания stdafx.pch файла который участвует в билдинге проекта, для отделения стабильной части проекта от нестабильной(которую и пытаемся откомпилить), так что думаю прекомпилированный заголовок нужен.

Насчет опций: захожу в Проект->Properties->Configuration Properties->C/C++ Cammand Line->Addititoanl options
делаю Rebuild — эффект тот же
Re[2]: STL и опции /MT и /MD
От: sonsen  
Дата: 20.02.08 01:06
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>sonsen пишет:

>> #include "stdafx.h"

MZ>Выкини stdafx.h stdafx.cpp из проекта.


это не помогло ...
Re[4]: STL и опции /MT и /MD
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 20.02.08 04:15
Оценка:
Здравствуйте, sonsen, Вы писали:

S>Насчет опций: захожу в Проект->Properties->Configuration Properties->C/C++ Cammand Line->Addititoanl options


зайди отдельно в Properties YourMainFile.cpp и stdafx.cpp и сравни их
... << RSDN@Home 1.2.0 alpha rev. 788>>
Re: STL и опции /MT и /MD
От: Tujh Голландия  
Дата: 20.02.08 04:56
Оценка:
Здравствуйте, sonsen, Вы писали:

S>[i]

1>>cl : Command line warning D9025 : overriding '/MDd' with '/MT'
1>>cl : Command line warning D9025 : overriding '/W3' with '/W1'
1>>cl : Command line warning D9025 : overriding '/MDd' with '/MT'
1>>cl : Command line warning D9025 : overriding '/W3' with '/W1'
S>а вот с /MD опицией все ок. Не пойму в чем дело?

Внимательно читаем, что написал компилятор.
Опции /MDd (Multi-threaded Debug) /MT (Multi-threaded) взаимоисключающие, а у вас объявлены одновременно. То же самое и с /W3 и /W1
Предположительно — одна опция объявлена в настроках проекта, а вторая в настройках для .cpp файла, проверте внимательно.

Для справки:
http://msdn2.microsoft.com/en-us/library/8k3f51f1(vs.80).aspx
Re: STL и опции /MT и /MD
От: MShura  
Дата: 20.02.08 06:07
Оценка:
1>>Build log was saved at "file://d:\VStudioProjects\STLtest\STLtest\Debug\BuildLog.htm"

Посмотри этот файл и увидишь разные опции для разных частей проекта.
Если не увидишь — выкладывай сюда.
Re[3]: STL и опции /MT и /MD
От: MasterZiv СССР  
Дата: 20.02.08 07:23
Оценка:
Кодт пишет:
> MZ>Выкини stdafx.h stdafx.cpp из проекта.
>
> Подозреваю, что эта программка — дистилляция проблемы, на которой она
> воспроизводится.

Вот именно, мысль такая и была. Он сгенерил проект стандартный, а опции поставил
только у MAIN. Поскольку других модулей нет, ситуация вполне вероятная.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.