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
相關文章
相關標籤/搜索