当webrtc遇上_ITERATOR_DEBUG_LEVEL

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

内容简介:编译如果用的是中文版的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版本中不要加这个参数。


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

查看所有标签

猜你喜欢:

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

游戏编程模式

游戏编程模式

Robert Nystrom / GPP翻组 / 人民邮电出版社 / 2016-9-1 / 61.4

游戏开发一直是热门的领域,掌握良好的游戏编程模式是开发人员的应备技能。本书细致地讲解了游戏开发需要用到的各种编程模式,并提供了丰富的示例。 全书共分20章,通过三大部分内容全面介绍了与游戏编程模式相关的各类知识点。首部分介绍了基础知识和框架;第二部分深入探索设计模式,并介绍了模式与游戏开发之间的关联;第三部分介绍了13种有效的游戏设计模式。 本书提供了丰富的代码示例,通过理论和代码示例......一起来看看 《游戏编程模式》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码