我是靠谱客的博主 飘逸鸭子,最近开发中收集的这篇文章主要介绍当webrtc遇上_ITERATOR_DEBUG_LEVEL,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

编译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版本中不要加这个参数。

最后

以上就是飘逸鸭子为你收集整理的当webrtc遇上_ITERATOR_DEBUG_LEVEL的全部内容,希望文章能够帮你解决当webrtc遇上_ITERATOR_DEBUG_LEVEL所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部