这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【分享开发笔记,赚取电动螺丝刀】关于在导入第三方库lib时,wchart类型冲突

共3条 1/1 1 跳转至

【分享开发笔记,赚取电动螺丝刀】关于在导入第三方库lib时,wchart类型冲突的原因及解决方案

菜鸟
2025-11-24 01:57:12     打赏

一、开发环境

开发软件:keil

版本:v6.21(AC6);


image-20251124005706041.png

image-20251124005706041


二、问题描述

开发过程中,在导入第三方库.lib 编译时,出现 wchart-16 clashes with wchart-32 的报错;image-20251124010336709

image-20251124010336709.png



三、出现的原因


1、关于 enum / wchar

enum 类型的底层存储类型是由编译器实现定义的,通常默认为 int(4字节);

当开启 Short enums 选项后,编译器会试使用最小可能的整数类型来表示枚举值(比如 char、short 等),只要能容纳所有枚举常量即可;

使用 Short enums (1字节) 可节省内存 !


wchar_t 是 C/C++ 中用于宽字符的类型,其大小也是编译器实现定义的 ;

当开启 Short wchar 选项后, wchar_t 将变为 2 字节;

可以选择 wchar_t 为 2 字节 或 4 字节;


2、报错原因

在使用第三方 lib库时,库中混合使用了两种不同宽度的 wchar_t 类型,一部分代码 / 库编译时使用 wchar_t 为 16 位,另一部分使用 32 位,从而导致链接冲突;

wchart-16 clashes with wchart-32


3、编译器配置

默认情况:在使用AC6编译时,会自动勾选 Short enums/wchar ;

等同于 -fshort-enums -fshort-wchar

image-20251124010621697

image-20251124010621697.png

当开启 Short enums/wchar时,可能会导致与一些库不兼容,与未开启该选项的库链接时出错;


四、解决方案


方法一

关闭 Short enums/whcar 选项

即使用 enums(4字节),wchar_t (4字节);


取消勾选 Short enums/whcar 选项 即可;

image-20251124014404758

image-20251124014404758.png



方法二

只关闭 Short wchar

启用 Short enums (1字节) ,而 wchar_t 大小为 4字节;


同样取消勾选 Short enums/whcar 选项;

在 Misc Controls 中添加:-fshort-enums,开启 Short enums,以节省内存空间;


如图所示:

image-20251124014318002.png









image-20251124014318002





院士
2025-11-24 09:32:25     打赏
2楼

涨知识了。

还没有遇到过类似的问题,这个技术点也是第一次了解

谢谢楼主分享


专家
2025-11-25 08:41:23     打赏
3楼

谢谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]