Почему у меня возникает конфликт LNK4098 с использованием других библиотек - при попытке скомпилировать C ++ в MSVS2010 Express?

Моя программа не может успешно компилироваться в режиме / MT (многопоточность). Он компилируется в / MD (многопоточная 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

Кто-нибудь знает, что я делаю не так?

Спасибо, Уильям

6
задан William Whispell 30 April 2011 в 03:50
поделиться