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