【发布时间】:2016-10-22 09:49:47
【问题描述】:
我有一个这样的示例程序:
#include <stdio.h>
#if 1
#define FOR_EXPORT __attribute__ ((visibility("hidden")))
#else
#define FOR_EXPORT
#endif
FOR_EXPORT void mylocalfunction1(void)
{
printf("function1\n");
}
void mylocalfunction2(void)
{
printf("function2\n");
}
void mylocalfunction3(void)
{
printf("function3\n");
}
void printMessage(void)
{
printf("Running the function exported from the shared library\n");
}
并使用编译它
gcc -shared -fPIC -fvisibility=hidden -o libdefaultvisibility.so defaultvisibility.c
现在编译后我会这样做:
$ nm libdefaultvisibility.so
nm libdefaultvisibility.so
0000000000000eb0 t _mylocalfunction1
0000000000000ed0 t _mylocalfunction2
0000000000000ef0 t _mylocalfunction3
0000000000000f10 t _printMessage
U _printf
U dyld_stub_binder
据我所知,这意味着尽管-fvisibility=hidden 所有符号都会被导出。我正在关注的这本书声称只有标有FOR_EXPORT 的函数应该被导出。
我查看了其他几个资源,但对于我正在做的简单测试-fvisibility=hidden 应该足够了。
我的 clang 版本:
$ clang -v
clang -v
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.0.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
【问题讨论】:
-
我相信你想要命令
nm -gCD libdefaultvisibility.so | grep ' T ',而不是nm libdefaultvisibility.so。 How to apply gcc -fvisibility option to symbols in static libraries? 的可能重复项