gpt4 book ai didi

c++ - 为什么在使用其他库时会出现 LNK4098 冲突 - 尝试在 MSVS2010 Express 中编译 C++ 时?

转载 作者:可可西里 更新时间:2023-11-01 13:28:39 25 4
gpt4 key购买 nike

我的程序无法在/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

有人知道我做错了什么吗?

谢谢,威廉

最佳答案

尝试在 VC 的链接器选项中设置 nodefaultlib:libcmt.lib

关于c++ - 为什么在使用其他库时会出现 LNK4098 冲突 - 尝试在 MSVS2010 Express 中编译 C++ 时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5839362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com