8

我有一个具有 f1 功能的应用程序 void f1 ()

此外,我有一个库,我使用LD_PRELOAD.

该库有几个代码文件和几个头文件,并编译为.so文件。

f1其中一个头文件也使用了一个与上面签名相同的函数。最新f1的仅在库中使用。(我无法将其更改为静态方法)

问题是当我从应用程序的库覆盖中加载库(使用LD_PRELOAD)时。f1f1

有没有办法将库配置f1为仅对库可见?

4

2 回答 2

5

如果您完全可以修改头文件,请使函数static使其仅在该编译单元中可见,或者用__attribute__ ((visibility ("hidden")))(仅 GCC)标记以使其仅在该库中可见:

__attribute__ ((visibility ("hidden"))) void f1();
于 2013-03-10T12:28:55.837 回答
3

您还可以使用-fvisibility=hidden编译您的库,并将显式__attribute__ ((visibility ("default")))用于需要可见的库的少数功能。

于 2013-03-10T12:34:29.120 回答