WebRTC在windows下编译时 怎么修改RuntimeLibrary类型

本文介绍如何解决WebRTC在Windows平台下由于默认使用静态链接库(MT)而导致与多数使用动态链接库(MD)的项目之间的冲突问题。通过修改配置文件build.gn中的相关设置,可以强制WebRTC使用动态链接库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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了。



### Windows 运行库概述 Windows Runtime Library 是指 Microsoft Visual C++ 编译器用于支持标准 C 和 C++ 库功能的一组动态链接库 (DLL) 或静态库。这些库提供了诸如内存管理、输入/输出操作以及字符串处理等功能的支持。开发者可以通过调整项目的配置来指定使用的运行时库类型。 #### 设置运行时库的类型 在 Visual Studio 中,可以按照以下路径设置运行时库的类型: `Properties -> Configuration Properties -> C/C++ -> Code Generation -> Runtime Library`[^1]。 常见的运行时库选项包括: - **Multi-threaded (/MT)**: 使用静态多线程 CRT。 - **Multi-threaded Debug (/MTd)**: 使用调试版本的静态多线程 CRT。 - **Multi-threaded DLL (/MD)**: 使用动态多线程 CRT。 - **Multi-threaded Debug DLL (/MDd)**: 使用调试版本的动态多线程 CRT。 #### WebRTC 的运行时库冲突问题 在某些情况下,WebRTCWindows 平台下的编译可能默认使用 MT 类型的运行时库,而其他项目通常依赖 MD 类型的运行时库。这种差异可能导致运行时库冲突问题[^2]。为了解决此问题,建议将 WebRTC 的构建过程中的运行时库类型更改为 /MD 或 /MDd。 #### 解决运行时库冲突的方法 当遇到 `LNK2038` 错误时,表明检测到了运行时库类型的不匹配。例如,错误消息显示值 “MTd_StaticDebug” 不匹配值 “MDd_DynamicDebug”。此时应检查并统一整个解决方案中所有模块的运行时库设置[^5]。具体做法如下: - 将所有项目文件的运行时库类型更改为一致的选项(通常是 `/MD` 或 `/MDd`)。 - 清理并重新生成整个解决方案以确保更改生效。 #### 关于运行时错误提示 有时应用程序可能会因运行时错误而导致崩溃,并弹出类似于“Microsoft Visual C++ Runtime Library”的警告窗口。这类问题可能是由于未安装必要的运行时组件或程序内部逻辑缺陷引起的[^3]。为了防止此类情况影响用户体验,可以采取措施禁用系统的错误报告服务[^4]: 通过注册表编辑器 (`regedit`) 修改以下键值: ```plaintext HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting ``` 将其子项 `Disabled` 设置为 `1` 可有效阻止错误报告对话框的弹出。 --- ### 示例代码片段 以下是针对某项目全局修改运行时库类型的脚本示例(适用于 MSBuild 系统): ```xml <PropertyGroup> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> </PropertyGroup> ``` 或者手动更新 `.vcxproj` 文件内的 `<RuntimeLibrary>` 属性至所需值。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值