GCC在4.0版中添加了能见度支持。我的make中有以下内容,它将共享对象的大小减少了大约1/3 (1.5 MB):
GCC40_OR_LATER = $(shell $(CXX) -v 2>&1 | $(EGREP) -c "^gcc version ([4-9])")
ifeq ($(GCC40_OR_LATER),1)
CXXFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
endif我想为Clang添加一个类似的规则。Clang什么时候增加了可见性支持?一直都有吗?
发布于 2015-03-01 08:32:38
证实是在3.3+。我没有测试任何较低的版本,但我愿意打赌,它在那里,并一直在那里。我测试了3.3,3.4,3.5,3.6和3.7。
有关其他“新”属性的列表(关于3.7),请参见:http://clang.llvm.org/docs/AttributeReference.html

正如您所看到的,变量"a“是在第一张图片中导出的,但是在第二张图片中,我隐藏了它,它已经不在符号表中了。我继续在最后一张图片中隐藏函数,它们也不在符号表中。
我把这看作是它起作用的标志。在上进行了测试,没有安装gcc或g++或Mint或其他任何设备。只是代码块,clang和llvm。我已经卸载gcc和g++后,建立了clang (以避免冲突和问题,如果出现任何我怀疑会发生,但我是学究)。
注:我试过#define the hidden attribute,但没有雪茄。
对于那些喜欢文本输出的人:
kira@Kira ~/Desktop/shm/bin/Debug $ nm -gC liblibshm.so
0000000000200980 B __bss_start
w __cxa_finalize@@GLIBC_2.2.5
0000000000200980 D _edata
0000000000200988 B _end
0000000000000628 T _fini
w __gmon_start__
00000000000004b0 T _init
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
w _Jv_RegisterClasses
kira@Kira ~/Desktop/shm/bin/Debug $ clang++ --version
Ubuntu clang version 3.3-16ubuntu1 (branches/release_33) (based on LLVM 3.3)
Target: x86_64-pc-linux-gnu
Thread model: posix
kira@Kira ~/Desktop/shm/bin/Debug $ https://stackoverflow.com/questions/28791189
复制相似问题