在C中隐藏函数

时间:2013-03-10 12:25:28

标签: c linux ld-preload

我的应用程序具有函数f1 void f1 ()

此外,我有一个使用LD_PRELOAD加载的库。

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

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

问题是当我从库中加载库(使用LD_PRELOADf1时会覆盖应用程序的f1

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

2 个答案:

答案 0 :(得分:5)

如果您可以修改头文件,请使用函数static使其仅在该编译单元中可见,或者使用__attribute__ ((visibility ("hidden")))(仅限GCC)将其标记为仅在那个图书馆:

__attribute__ ((visibility ("hidden"))) void f1();

答案 1 :(得分:3)

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