我的应用程序具有函数f1 void f1 ()
此外,我有一个使用LD_PRELOAD
加载的库。
该库有几个代码文件和几个头文件,并编译为.so文件。
在头文件中,还使用名为f1
的函数,该函数具有与上面相同的签名。
最新的f1
仅在库中使用。 (我无法将其更改为静态方法)
问题是当我从库中加载库(使用LD_PRELOAD
)f1
时会覆盖应用程序的f1
。
有没有办法将库的f1
配置为仅对库可见?
答案 0 :(得分:5)
如果您可以修改头文件,请使用函数static
使其仅在该编译单元中可见,或者使用__attribute__ ((visibility ("hidden")))
(仅限GCC)将其标记为仅在那个图书馆:
__attribute__ ((visibility ("hidden"))) void f1();
答案 1 :(得分:3)
您还可以使用-fvisibility=hidden编译您的库,并使用显式__attribute__ ((visibility ("default")))
来显示您的库中需要显示的少数功能。