我的"C"代码中有许多功能.当我编译.so时,我在结果.so文件中看到所有名称.如何指定(在代码或make文件中)只应导出某些函数,而其他函数仅供内部使用.
caf*_*caf 18
既然您提到了.so文件,那么您使用gcc或使用类似gcc的编译器似乎是一个合理的假设.
默认情况下,所有extern功能在链接对象中都可见.您可以使用hidden属性逐个隐藏函数(和全局变量)(同时保留它们extern,这允许它们从同一库中的其他源文件中使用):
int __attribute__((visibility("hidden"))) foo(void)
{
return 10;
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以hidden通过在编译时传递-fvisibility=hidden选项来更改默认值gcc.然后,您可以使用以下方法标记要导出的特定
__attribute__((visibility("default")))
Run Code Online (Sandbox Code Playgroud)
在C中,如果您希望函数保留在包含它的文件内部(技术上,"编译单元"),则将其声明为"静态".例如,
static int privateAddOne(int x) { return x + 1; }
Run Code Online (Sandbox Code Playgroud)