Itanium ABI 有一些压缩标识符以进行名称修改的规则:例如,给定
namespace foo {
struct string {
void f();
};
};
该函数std::string::f()
被编码为_ZN3foo6string1fEv
但给定
namespace std {
struct string {
void f();
};
};
该函数foo::string::f()
被编码为_ZNSt6string1fEv
更短一些。还有其他快捷方式,例如 for std::allocator
、std::basic_string
等。
我的问题是:有没有办法为我自己的图书馆指定这样的规则?例如,我有很多包含
_ZZN5boost9container16allocator_traitsINS0_22small_vector_allocatorISt4pairIhhENS0_13new_allocatorIvEEvEEE9constructIS4_JRKS4_EEEvRS7_PT_DpOT0_E5value
_ZGVN5boost4asio6detail30execution_context_service_baseINS1_22deadline_timer_serviceINS1_18chrono_time_traitsINSt6chrono3_V212system_clockENS0_11wait_traitsIS7_EEEEEEE2idE
等等......这无缘无故地让我的二进制文件膨胀。
抢先回答问题:
- 我已经使用压缩的调试信息,这还不够
- 我必须导出这些符号(但可以假设动态调用它们的代码知道我将进行的任何更改,我控制着整个工具链)