【发布时间】:2015-06-23 01:46:07
【问题描述】:
我们正在使用 IAR Embedded Workbench 创建库。
当我们使用这些库编译项目时,我们面临一个问题: 如果应用层实现了与库中定义的函数同名的函数,则会在应用编译期间通知“重复定义”错误。
为了避免这种错误类型,我只想知道是否有办法隐藏编译库的内部 API 以及内部符号(全局变量...)?
提前谢谢你
【问题讨论】:
标签: compilation workbench iar
我们正在使用 IAR Embedded Workbench 创建库。
当我们使用这些库编译项目时,我们面临一个问题: 如果应用层实现了与库中定义的函数同名的函数,则会在应用编译期间通知“重复定义”错误。
为了避免这种错误类型,我只想知道是否有办法隐藏编译库的内部 API 以及内部符号(全局变量...)?
提前谢谢你
【问题讨论】:
标签: compilation workbench iar
对于只在单个编译单元中使用的内部函数和变量,可以用static关键字给它们内部链接:
/*library.c*/
static int internalLinkageVar;
static void internalLinkageFunc(void);
这当然不适用于库中的多个 .c 文件必须可以访问的符号。对于那些最好在符号名称上使用合理的长前缀:
int MyLibrary_Private_Var2;
void MyLibrary_Private_Func(void);
【讨论】:
#define 为本地使用创建一个短别名。不优雅,但 C 语言一开始就不是完美的语言。