有没有办法使用自定义的G ++ /铛++重整的方法吗?

问题描述 投票:6回答:2

当使用C ++模板,尤其是元组,我常常会很长错位的名称,如

_ZN11__sanitizer13InternalAllocEmPNS_28SizeClassAllocatorLocalCacheINS_20SizeClassAllocator32ILm0ELy140737488355328ELm0ENS_12SizeClassMapILm3ELm4ELm8ELm17ELm64ELm14EEELm20ENS_15TwoLevelByteMapILy32768ELy4096ENS_20NoOpMapUnmapCallbackEEES5_EEEEm

这是在标称的情况下明显的罚款,并缓解调试,但是,当我使用自定义类型的大元组(大的命名空间),这最终具有非常巨大的二进制文件,因为错位的名称仅仅;有些工具(如Valgrind的),甚至有使分析几乎是不可能的符号名称的最大长度。

我不知道是否有一种方法可以让G ++ /铛++使用自定义的mangling函数(比如MD5),使得很长的符号变成5c66b1073e1b453900bd7d32cb79fc0e这是方式更短。

c++ g++ clang++ name-mangling
2个回答
2
投票

缺乏这种创新在任何重要的C ++实现的是这样一个事实:C ++编译器的名字,忙玲协议是其ABI的一部分,并不能成为用户的选择在同一时间占了。

出了名的,使用GCC编译的C ++代码是不是与微软编译器编译代码的互操作,因为,除其他外,它们使用不同的名称重整协议。而事实上,他们使用不同的名称重整协议,而不能直接使用同一个,保证了微妙的ABI的不兼容性将无法生存的尝试联动。

C ++编译器的名称的mangling协议的恒定性还假设在其他工具链公用事业,例如binutils的nmobjdump


1
投票

我不知道有什么方法来完全替代符号。但是你可以用-s剥离的二进制文件从而除去所有符号。这样可以减少你的运二进制文件的大小,但是当然不能与调试使用。

© www.soinside.com 2019 - 2024. All rights reserved.