/** @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