Моя программа не будет успешно скомпилирована в режиме / MT (MultiThreaded). Компилируется в / MD (MultiThreaded DLL). Я хочу иметь возможность использовать libcurl и boost в приложении, которое я распространю с помощью установщика.
Компиляция в: MSVS2010
Это код для повторения моей проблемы:
#include "stdafx.h"
#include "boost/regex.hpp"
#include "curl/curl.h"
int _tmain(int argc, _TCHAR* argv[])
{
CURL *curl;
curl = curl_easy_init();
return 0;
}
Это предупреждение появляется в режиме / MD:
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs;
use /NODEFAULTLIB:library
Если я пытаюсь скомпилировать в режиме / MT, я получаю:
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _calloc already defined in
LIBCMT.lib(calloc.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _realloc already defined in LIBCMT.lib(realloc.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _free already defined in LIBCMT.lib(free.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _malloc already defined in LIBCMT.lib(malloc.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _strtoul already defined in LIBCMT.lib(strtol.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _memmove already defined in LIBCMT.lib(memmove.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _tolower already defined in LIBCMT.lib(tolower.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _strtol already defined in LIBCMT.lib(strtol.obj)
...
: fatal error LNK1169: one or more multiply defined symbols found
Я хочу скомпилировать в режиме / MT, чтобы другие могли запускать мою готовую программу без установленной MSVS или без необходимости загружать что-либо дополнительное. Я могу включить в установщик файлы dll или lib, необходимые для моего приложения.
Я мог бы отключить загрузку библиотеки по умолчанию 'MSVCRTD', но тогда компиляция с boost не удалась.
Это мои определения препроцессора:
WIN32
_DEBUG
_CONSOLE
BUILDING_LIBCURL
HTTP_ONLY
Это мои дополнительные зависимости:
libcurl.lib
ws2_32.lib
winmm.lib
wldap32.lib
Кто-нибудь знает, что я делаю не так?
Спасибо,
William