Ale*_*oVK 5 c++ linker-warning
我有一个dll项目,当在Release配置中构建项目时,我收到以下警告:
MSVCRT.lib(cinitexe.obj):警告LNK4098:defaultlib'msvcrtd.lib'与使用其他库冲突; 使用/ NODEFAULTLIB:库
这只是一个警告,但我不知道是否应该考虑到这一点.
对于我发现的,它们都是多线程库,正常版本和调试版本.我的DLL使用多线程,我可以调试它,虽然我使用boost:thread,所以我真的不知道如果我需要这个Windows特定的库进行调试或发布构建...
亲切的问候,Alex
好吧,我按照BuschnicK的建议并使用/ VERBOSE:LIB链接器标志我发现我在Debug配置中链接到这些库:
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配置中也一样,主要是因为我没有明确指定"明确".因此,我在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:
这似乎工作但我仍然得到第一个警告,直到我意识到我在我的发布配置中也有_DEBUG预处理器定义,删除它,它现在正在工作.
谢谢大家的帮助!!
Bus*_*icK 10
如果仔细阅读,它会说明问题的正确性:"MSVCRT.lib"vs"msvcrtd.lib"
请注意第二个库名称中添加的"d".会发生什么是您静态链接到Visual Studio C++运行时(MSVCRT).你的一个库正在拉动该lib的发行版本,而另一个正在拉动调试版本(因此后缀为"d").链接器告诉您两个库定义具有相同名称的函数,这些函数存在冲突,因此其中一个会自动删除.
要解决此问题,请完成所有项目/库的构建设置,并确保它们对所有构建配置使用相同的运行时库.查看project properties- > C/C++- > Code Generation- > Runtime Library.这可能应该是发布版本的"多线程"和调试版本的"多线程调试".
请注意,静态链接这些库通常被认为是不好的做法,您应该更喜欢动态链接的dll版本.
| 归档时间: |
|
| 查看次数: |
13308 次 |
| 最近记录: |