gcc 的visibility 使用
来源:互联网 发布:村雨妖刀赤瞳淘宝 编辑:程序博客网 时间:2024/05/01 10:54
-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 GLOBAL DEFAULT 11 not_hidden
48: 00000420 20 FUNC LOCAL HIDDEN 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确实起到作用了。
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 GLOBAL DEFAULT 11 not_hidden
48: 00000420 20 FUNC LOCAL HIDDEN 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确实起到作用了。
- gcc 的visibility 使用
- gcc 的visibility 使用
- gcc 的visibility 使用
- gcc 的visibility 使用
- gcc 的visibility 使用
- gcc 的visibility
- GCC系列: __attribute__((visibility("")))
- GCC wiki Visibility
- Linux下__attribute__((visibility ("default")))的使用
- GCC扩展 __attribute__ ((visibility("hidden")))
- gcc visibility hidden 与 static
- gcc __attribute__关键字举例之visibility
- gcc __attribute__关键字举例之visibility
- gcc __attribute__关键字举例之visibility
- gcc __attribute__关键字举例之visibility
- GCC编译器的使用
- GCC编译器的使用
- gcc使用的方法
- 关于hibernate反响映射文件的总结
- MySQL存储过程之事务管理
- hdu 1040 As Easy As A+B(水)
- 关于用Java做ACM的题目提交时的问题
- 简单快速解决“无法删除文件和文件夹”
- gcc 的visibility 使用
- 主题:对web-info下的资源保护策略
- POSIX线程的私有数据
- 关于ssh三大框架中web.xml的总结
- Microsoft 神经网络算法技术参考
- eclipse中安装vim插件
- 用神经网络进行摄像头标定
- 多校15场WHU Harry Potter and the Forbidden Forest(求网络的最小割的最小边数)
- 测试 extendlv 对 fs 的影响