You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复C++ Builder静态链接时出现的std::locale::id::id未解析链接错误

C++ Builder 10.4 静态链接未解析std::locale符号错误解决

错误信息

[ilink32 Error] Error: Unresolved external 'std::locale::id::id(unsigned int)' referenced from C:\USERS\PUBLIC\DOCUMENTS\EMBARCADERO\STUDIO\21.0\DCP\SCREEN2VIDEO.LIB|Screen2Video

触发场景

  • 关闭项目编译选项中Link with dynamic RTL、Link with run-time packages(即使用静态链接模式)时触发
  • 开启动态RTL链接时错误自动消失
  • 报错的SCREEN2VIDEO.LIB来源于导入了ActiveX控件的自定义开发包

根因

SCREEN2VIDEO.LIB编译时使用了动态RTL配置,库内引用的std::locale::id构造函数符号依赖动态RTL的导出表。当项目切换为静态链接模式后,静态RTL库未默认暴露对应签名的符号,导致链接器无法找到匹配的符号定义。

解决方案

方案1:重新编译SCREEN2VIDEO开发包(优先选择)

  • 打开SCREEN2VIDEO对应的包工程文件
  • 同步包的编译配置与当前项目配置:关闭Link with dynamic RTL、Link with run-time packages,选择和项目一致的位数(32位/64位)、编译版本(Debug/Release)
  • 重新编译包生成新的SCREEN2VIDEO.LIB,替换项目中引用的旧库后重新编译项目即可

方案2:补充静态RTL依赖库

如果无法获取SCREEN2VIDEO的包工程,可手动添加静态RTL的链接依赖:

  • 打开项目选项→C++ Linker→Additional libraries to link
  • 32位项目添加cc32mt.lib(Release版)或cc32mti.lib(Debug版)
  • 64位项目添加cc64mt.lib(Release版)或cc64mti.lib(Debug版)
  • 保存配置后重新编译项目

方案3:强制导出缺失符号(临时兼容方案)

若上述两个方案均无效,可在项目任意.cpp文件头部添加如下代码,强制暴露链接需要的符号:

#include <locale>
// 32位项目使用以下代码
#pragma comment(linker, "/export:??0id@locale@std@@QAE@I@Z")
// 64位项目注释上一行,使用以下代码
// #pragma comment(linker, "/export:??0id@locale@std@@QEAA@I@Z")

该方案为临时兼容手段,可能存在运行时风险,生产环境建议优先使用前两个方案。


内容的提问来源于stack exchange,提问作者vision

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 20:48:02