gpt4 book ai didi

c++ - visual studio 链接器警告 LNK4098

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:35 33 4
gpt4 key购买 nike

我有一个 dll 项目,在发布配置中构建项目时,我收到以下警告:

MSVCRT.lib(cinitexe.obj) : warning LNK4098: defaultlib 'msvcrtd.lib' conflicts with use of other libs; use /NODEFAULTLIB:library

这只是一个警告,但我不知道是否应该考虑这一点。

据我所知,它们都是多线程库、正常版本和调试版本。我的 dll 使用多线程,我可以调试它,尽管我使用了 boost:thread,所以我真的不知道我是否需要这个 Windows 特定的库来调试或发布构建...

亲切的问候,亚历克斯

好吧,我按照 BuschnicK 的建议做了,并使用/VERBOSE:LIB 链接器标志,我发现我在调试配置中链接到这些库:

boost_filesystem-vc100-mt-gd-1_44.lib:libboost_system-vc100-mt-gd-1_44.lib:libboost_thread-vc100-mt-gd-1_44.lib:libboost_date_time-vc100-mt-gd-1_44.lib:

我在发布配置中有相同的配置,主要是因为我当时没有“明确”指定。因此,我在 Release 中将它们更改为:

boost_filesystem-vc100-mt-1_44.lib:libboost_system-vc100-mt-1_44.lib:libboost_thread-vc100-mt-1_44.lib:libboost_date_time-vc100-mt-1_44.lib:

这似乎有效,但我仍然收到第一个警告,直到我意识到我的 Release 配置中也有 _DEBUG 预处理器定义,将其删除,它现在运行良好。

谢谢大家的帮助!!

最佳答案

如果您仔细阅读,消息中会说明问题所在:“MSVCRT.lib”与“msvcrtd.lib”

注意第二个库名称中添加的“d”。发生的情况是您静态链接到 visual studio C++ 运行时 (MSVCRT)。您的一个库正在提取该库的发布版本,而另一个正在提取调试版本(因此后缀“d”)。链接器告诉您,两个库都定义了同名函数,存在冲突,因此其中一个库会自动删除。

要解决此问题,请检查所有项目/库的build设置,并确保它们对所有构建配置使用相同的运行时库。查看项目属性 -> C/C++ -> 代码生成 -> 运行时库。对于发布版本,这可能应该是“多线程”,对于调试版本,应该是“多线程调试”。

请注意,静态链接这些库通常被认为是不好的做法,您应该更喜欢动态链接的 dll 版本。

关于c++ - visual studio 链接器警告 LNK4098,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4334925/

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