免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 18119 | 回复: 6
打印 上一主题 下一主题

关于gcc 的 -fvisibility 隐藏符号问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-12 11:26 |只看该作者 |倒序浏览
大家好:
我在编译动态库时,想把一些不需要导出函数给隐藏起来。
因此我使用了-fvisibility属性。

我的GCC版本信息如下:
gcc -v
使用内建 specs。
目标:i486-linux-gnu
配置为:../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release i486-linux-gnu
线程模型:posix
gcc 版本 4.1.2 (Ubuntu 4.1.2-0ubuntu4)


我编译一个1.c文件:
#include "stdio.h"

#if defined(__GNUC__) && \
        ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
#define NP_VISIBILITY_DEFAULT __attribute__((visibility("default")))
#else
#define NP_VISIBILITY_DEFAULT
#endif

#define NP_EXPORT(__type) NP_VISIBILITY_DEFAULT __type

NP_EXPORT(int) a()
{
printf("1.c i am a\0");
return 0;
}
int b()
{
return 0;
}
我的目的是默认没有使用NP_EXPORT宏的函数都隐藏起来,即把b函数给隐藏起来,而a函数则导出去。

我的编译步骤和指令如下:
gcc -c 1.c
gcc -shared -fvisibility-inlines-hidden -fvisibility=hidden  -o 1.so 1.o

编译后生成了1.so文件。
我使用nm工具查看,发现 b函数还是被导出去了,没有达到隐藏的目的。

不知道有哪为这么有经验的朋友能指点下不? 是我的gcc版本问题吗?

(不好意思我的积分好像没。。。。 不好意思了大家)

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2007-10-12 13:33 |只看该作者
link 时可以找到 b 么?

论坛徽章:
0
3 [报告]
发表于 2007-10-12 15:41 |只看该作者
恩,可以的啊。
我想就是让它不找到b的。。。

论坛徽章:
0
4 [报告]
发表于 2007-10-15 09:46 |只看该作者
没人知道吗?
RE

论坛徽章:
0
5 [报告]
发表于 2007-10-15 16:15 |只看该作者
去掉 -fvisibility-inlines-hidden 就行了, 我 晕。。。。。

[ 本帖最后由 dedodong 于 2007-10-15 16:19 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2007-10-15 19:04 |只看该作者
原帖由 dedodong 于 2007-10-15 16:15 发表
去掉 -fvisibility-inlines-hidden 就行了, 我 晕。。。。。

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
7 [报告]
发表于 2009-11-08 23:13 |只看该作者
隐藏链接库的符号问题,在FreeBSD上有套工具crunch可以做。这套工具可以将若干个程序编译成一个可执行程序。其原理就是修改了目标文件。

[ 本帖最后由 mirnshi 于 2009-11-8 23:17 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP