WebRTC在windows平台下编译时默认是MT的runtime,但是当大家在集成的时候自己的工程很多都是MD的,这时会报运行时库冲突问题。
首先普及下 MT/MD的优缺点http://blog.youkuaiyun.com/nodeathphoenix/article/details/7550546
可以看出 现在的主流是MD。
那么怎么修改MT/MD呢?官方文档对此的说明少之又少,网上搜了很久也没有找到。当然只有旧版gyp时代的修改方法,在这里并不能用。
最终翻了很多build.gn文件 终于找到了修改的地方。
在src/build/config/win/build.gn文件中 有这么一段代码
config("default_crt") {
if (is_component_build) {
# Component mode: dynamic CRT. Since the library is shared, it requires
# exceptions or will give errors about things not matching, so keep
# exceptions on.
configs = [ ":dynamic_crt" ]
} else {
if (current_os != "win") {
# WindowsRT: use the dynamic CRT.
configs = [ ":dynamic_crt" ]
} else {
# Desktop Windows: static CRT.
configs = [ ":static_crt" ]
}
}
}
config("dynamic_crt") {
if (is_debug) {
cflags = [ "/MDd" ]
} else {
cflags = [ "/MD" ]
}
}
config("static_crt") {
if (is_debug) {
cflags = [ "/MTd" ]
} else {
cflags = [ "/MT" ]
}
}
这里可以看出 当configs为dynamic_ctr时才会编译md的版本。那么我们只需要让他强制为dynamic_ctr 在重新编译。一切就ok了。