当webrtc遇上_ITERATOR_DEBUG_LEVEL

栏目: IT技术 · 发布时间: 6年前

内容简介:编译如果用的是中文版的VC++,如错信息是这样的但是,你还会发现在Release模式编译链接就没有这个错误哦。

编译 webrtc 就挺困难的,因为要访问的 工具 、代码仓库等等都很不容易,编译完成后,拿 webrtc.lib 到项目里一集成,你可能就会遇到这个问题:

error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj

如果用的是中文版的VC++,如错信息是这样的

error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”(main.obj 中) 错误

但是,你还会发现在Release模式编译链接就没有这个错误哦。

你去搜索,可以发现原因是“当前工程是Debug版本,而引用的库文件时Release版本”,然后你就去编译了一个Debug版本的 webrtcd.lib ,然而,还是有这个错误,这时候你再全网搜索也找不到正确答案了,但有可能找到一个不完美的答案,那就是在项目中定义 _ITERATOR_DEBUG_LEVEL=0 ,链接错误没有了,但运行起来可以会突然间崩溃,进程退出,影响开发和调试。

我去翻了 gn args --list <out_dir> 命令的几百个参数,看花了眼睛,才终于彻底解决这个问题,这就是为什么我要在这里写来的原因:希望读者能在这里快速找到解决方案。

我强烈建议编译 webrtc 时,分开Debug和Release两个版本,它默认的编译参数是Release的。方法是在生成Debug版本时,执行 gn gen out/Debug --args="is_debug=true" ,而生成Release版本时执行 gn gen out/Release --args="is_debug=false"

很高兴在这里引出 args 参数,其实除了 is_debug 还有很多参数可以加上去,上文说过了,有几百个。如果你有很多参数通过命令行传递过去的话,你会烦死的,所以 gn 其实支持参数文件,你细心找一下,会在 out/Debugout/Relaese 有一个 args.gn 文件,你用记事本打开,发现之前传递的 is_debug=true 参数正好好地躺在里面呢。

回到正题, _ITERATOR_DEBUG_LEVEL 不匹配的解决方案就是在Debug版本的 args.gn 中写入 enable_iterator_debugging=true 参数,然后再执行 gn gen out/Debug 重新生成文件,再调用 ninja 编译就可以了。

不过,要记得在Release版本中不要加这个参数。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Tango with Django

Tango with Django

David Maxwell、Leif Azzopardi / Leanpub / 2016-11-12 / USD 19.00

Tango with Django is a beginner's guide to web development using the Python programming language and the popular Django web framework. The book is written in a clear and friendly style teaching you th......一起来看看 《Tango with Django》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具