【问题标题】:IAR lmibrary compilation : Remove / hide internal symbols and APIsIAR lmibrary 编译:删除/隐藏内部符号和 API
【发布时间】:2015-06-23 01:46:07
【问题描述】:

我们正在使用 IAR Embedded Workbench 创建库。

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

为了避免这种错误类型,我只想知道是否有办法隐藏编译库的内部 API 以及内部符号(全局变量...)?

提前谢谢你

【问题讨论】:

    标签: compilation workbench iar


    【解决方案1】:

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

    /*library.c*/
    static int internalLinkageVar;
    static void internalLinkageFunc(void);
    

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

    int MyLibrary_Private_Var2;
    void MyLibrary_Private_Func(void);
    

    【讨论】:

    • 没有比“给他们一个更长的名字”更好的方法吗?也许部分链接到一个转向文件?
    • @TomE 我看不到执行部分链接的明显方法,但我的 IAR 版本现在有点旧,我在浏览手册时可能遗漏了一些东西。我尽量避免使用在切换编译器时需要额外工作的功能,因此简单地使用更长的名称通常是阻力最小的路径。
    • @TomE 作为一种解决方法;假设您不在同一个编译单元中同时使用 app 和 lib 函数,您可以将 app 函数更改为更长的名称,但使用 #define 为本地使用创建一个短别名。不优雅,但 C 语言一开始就不是完美的语言。
    猜你喜欢
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多