- 论坛徽章:
- 0
|
大家好:
我在编译动态库时,想把一些不需要导出函数给隐藏起来。
因此我使用了-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版本问题吗?
(不好意思我的积分好像没。。。。 不好意思了大家) |
|