attribute__关键字举例之visibility

 

/** @file  visibilityT.c
*  @note   *  @brief
*  @author 
*  @date   2019-6-20
*  @note   v1.0.0 Created
*  @history
*  @warning
*/
/*-fvisibility=default|internal|hidden|protected
visibility用于设置动态连接库中函数的可见性,将变量或函数设置为hidden,则该符号仅在本so中可见,在其余库中则不可见。
这种方法可用有效避免so之间的符号冲突。
gcc的visibility是说,若是编译的时候用了这个属性,那么动态库的符号都是hidden的,除非强制声明。
第一个函数符号能够被导出,第二个被隐藏。
先编译成一个动态库,使用到属性-fvisibility

*/
#include<stdio.h>
#include<stdlib.h>


__attribute ((visibility("default"))) void not_hidden ()
{
printf("exported symbol/n");
}

void is_hidden ()
{
printf("hidden one/n");
}

/*
gcc -shared -fPIC -o libvis.so -fvisibility=hidden visibilityT.c
readelf -s libvis.so |grep hidden
*/

 

#include <stdio.h>

int main()
{
    not_hidden();
    is_hidden();
    return 0;
}

//gcc -o xmain main.c -L ./ -lvis
相关文章
相关标签/搜索