Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compilation IAR L库编译:删除/隐藏内部符号和API_Compilation_Workbench_Iar - Fatal编程技术网

Compilation IAR L库编译:删除/隐藏内部符号和API

Compilation IAR L库编译:删除/隐藏内部符号和API,compilation,workbench,iar,Compilation,Workbench,Iar,我们正在使用IAR Embedded workbench创建库 当我们使用这些库编译项目时,我们面临一个问题: 如果应用程序层实现的函数与库中定义的函数同名,则在应用程序编译期间会通知“重复定义”错误 为了避免这种错误类型,我只想知道是否有办法隐藏内部API和内部符号全局变量。。。编译库的名称 提前感谢您对于仅在单个编译单元中使用的内部函数和变量,您可以使用static关键字为它们提供内部链接: 这当然不适用于库中的多个.c文件必须可以访问的符号。对于那些,最好在符号名称上使用合理的长前缀: i

我们正在使用IAR Embedded workbench创建库

当我们使用这些库编译项目时,我们面临一个问题: 如果应用程序层实现的函数与库中定义的函数同名,则在应用程序编译期间会通知“重复定义”错误

为了避免这种错误类型,我只想知道是否有办法隐藏内部API和内部符号全局变量。。。编译库的名称


提前感谢您

对于仅在单个编译单元中使用的内部函数和变量,您可以使用static关键字为它们提供内部链接:

这当然不适用于库中的多个.c文件必须可以访问的符号。对于那些,最好在符号名称上使用合理的长前缀:

int MyLibrary_Private_Var2;
void MyLibrary_Private_Func(void);

难道没有比给他们一个更长的名字更好的方法吗?也许是使用指导文件进行部分链接?@TomE我看不出明显的方法来进行部分链接,但我的IAR版本现在有点旧了,我可能在浏览手册时遗漏了一些内容。我尽量避免在切换编译器时使用需要额外工作的功能,因此简单地使用较长的名称通常是阻力最小的方法。@TomE作为一种解决方法;假设在同一个编译单元中不同时使用app和lib函数,可以将app函数更改为更长的名称,但使用define为本地使用创建一个短别名。不优雅,但C语言一开始就不是完美的语言。
int MyLibrary_Private_Var2;
void MyLibrary_Private_Func(void);