用于隐藏符号的ARM的IAR中的部分链接

时间:2017-02-03 23:13:38

标签: c linker arm keil iar

我想分发一个由许多源文件组成的静态库,因此,在编译时,它包含许多目标文件。在目标文件中有一些静态函数和一些非静态函数。需要非静态函数,因为可能需要从其他对象调用一个目标文件中的函数。

我有一个对象,它基本上是库中的API,它有一个关联的头文件,应用程序开发人员将在其项目中包含这些头文件以便使用该库。我希望该头文件中的符号是使用该库的应用程序中唯一暴露的符号。

我使用IAR将我的代码编译成.a文件,然后将公共API标头包含到我的应用程序中并将.a链接到我的应用程序。

问题是我的库中的非静态函数只能由库中的其他对象调用,对于使用该库的应用程序是可见的。如果应用程序尝试定义与我的库函数之一具有相同名称的函数(偶然,巧合或有意),则会出现此问题。我不能使每个函数都是静态的(因此只对它们的编译单元可见),因为那个函数对于库的其余部分是不可用的。

基本上我想隐藏使用该库的应用程序中的符号。

我有办法在Keil中解决这个问题,它有效: 在Keil中,我可以通过使用标志实际链接我的库来进行部分链接 -ldpartial --privacy --no_locals --no_comment_section 并通过选项提供转向文件 --edit = steering.txt

有选择地选择我显示和隐藏的符号。 转向文件示例:

HIDE *
SHOW my_public_func1
SHOW my public_func2

在IAR中有没有办法做到这一点。即有没有办法部分链接库,然后将该库链接到应用程序。

我尝试过:https://www.iar.com/support/tech-notes/linker/hiding-symbols-from-a-library-using-isymexport-with-a-steering-file/

这是一个好主意,但是当我想要做的是将它直接链接到应用程序时,它需要将我的库单独加载到设备上。理想情况下,我想将生成的.out文件从上面的iar.com链接链接到应用程序,而不是单独加载它。

0 个答案:

没有答案