__attribute__((visibility("default")))
来源:互联网 发布:win7安装数据库没反应 编辑:程序博客网 时间:2024/06/05 03:36
http://blog.csdn.net/mutourenzhang/article/details/47803803
-fvisibility=default|internal|hidden|protected
gcc的visibility是说,如果编译的时候用了这个属性,那么动态库的符号都是hidden的,除非强制声明。1.创建一个c源文件,内容简单
#include<stdio.h>
#include<stdlib.h>
__attribute ((visibility("default"))) void not_hidden ()
{
printf("exported symbol/n");
}
void is_hidden ()
{
printf("hidden one/n");
}
想要做的是,第一个函数符号可以被导出,第二个被隐藏。
先编译成一个动态库,使用到属性-fvisibility
gcc -shared -o libvis.so -fvisibility=hidden vis.c
现在查看
# readelf -s libvis.so |grep hidden
7: 0000040c 20 FUNC GLOBALDEFAULT11 not_hidden
48: 00000420 20 FUNC LOCALHIDDEN 11 is_hidden
51: 0000040c 20 FUNC GLOBAL DEFAULT 11 not_hidden
可以看到,属性确实有作用了。
现在试图link
vi main.c
int main()
{
not_hidden();
is_hidden();
return 0;
}
试图编译成一个可执行文件,链接到刚才生成的动态库,
gcc -o exe main.c -L ./ -lvis
结果提示:
/tmp/cckYTHcl.o: In function `main':
main.c:(.text+0x17): undefined reference to `is_hidden'
说明了hidden确实起到作用了。
__attribute__((visibility("default")))
为了避免这种混乱,所以使用__attribute__((visibility("default")))__attribute__((visibility("hideen"))) 设置这个属性。
0 0
- __attribute__ ((visibility("default")))
- __attribute__((visibility("default")))
- __attribute__((visibility("default")))
- __attribute__((visibility("default")))
- __attribute__((visibility("default")))
- __attribute__((visibility("default")))
- __attribute__((visibility("default")))
- __attribute__((visibility("default")))
- __declspec(dllexport)、__declspec(dllimport)、__attribute__((visibility("default")))
- define AB_EXTERN extern "C" __attribute__((visibility ("default")))
- Linux下__attribute__((visibility ("default")))的使用
- GCC系列: __attribute__((visibility("")))
- #define dlllocal __attribute__ ((visibility ("hidden")))
- GCC扩展 __attribute__ ((visibility("hidden")))
- gcc __attribute__关键字举例之visibility
- gcc __attribute__关键字举例之visibility
- gcc __attribute__关键字举例之visibility
- gcc __attribute__关键字举例之visibility
- Cause: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "veh
- 不让苹果开发者账号折磨我
- fastjson序列化时去掉null字段
- 判断字段里是否含字母
- Leetcode: Shortest Distance from All Buildings
- __attribute__((visibility("default")))
- Eclipse插件Osgi
- c# byte[] 转换为 IntPtr几种方法
- 2015 移动技术白皮书
- JSON.stringify(),eval(),JSON.parse()
- 天声人語 20160105 「申」という字の来歴
- 关系型数据库管理系统简介
- spark源码阅读1
- Android.mk详解