gpt4 book ai didi

c++ - Clang 何时添加了对共享对象的可见性支持?

转载 作者:行者123 更新时间:2023-11-30 03:55:57 25 4
gpt4 key购买 nike

添加 GCC visibility support在 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 何时添加可见性支持?它一直可用吗?

最佳答案

确认它在 3.3+ 中。我没有测试任何较低版本,但我敢打赌它一直存在并且一直存在。我已经测试了 3.3、3.4、3.5、3.6 和 3.7。

有关其他"new"属性的列表(对于 3.7),请参阅:http://clang.llvm.org/docs/AttributeReference.html

enter image description here

如您所见,变量“a”在第一张图片中导出,但在第二张图片中,我隐藏了它,它不再在符号表中。我继续隐藏最后一张图片中的函数,它们也不在符号表中。

我认为这是有效的标志。在 Linux Mint Rebecca 上测试,没有安装 gcc 或 g++ 或 mingw 或任何其他东西。只有代码块和 clang 以及 llvm。我在构建 clang 后卸载了 gcc 和 g++(以避免出现冲突和问题[我怀疑会发生,但我很迂腐])。

注意:我试图#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 $

关于c++ - Clang 何时添加了对共享对象的可见性支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28791189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com