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