最小化绝对重新定位的数量 有一个用C++编写的Android目标动态库。最终二进制文件包含许多对相同符号的绝对重新定位,例如对于\uuucxa\upure\uvirtualreadelf--relocs告诉下一步: ... 00332fe4 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 00332fe8 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 00332fec 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 00332ff0 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 00332ff4 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 00332ff8 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 00332ffc 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 003330f4 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 003330f8 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 003330fc 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual ...

最小化绝对重新定位的数量 有一个用C++编写的Android目标动态库。最终二进制文件包含许多对相同符号的绝对重新定位,例如对于\uuucxa\upure\uvirtualreadelf--relocs告诉下一步: ... 00332fe4 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 00332fe8 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 00332fec 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 00332ff0 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 00332ff4 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 00332ff8 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 00332ffc 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 003330f4 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 003330f8 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual 003330fc 00030502 R_ARM_ABS32 00000000 __cxa_pure_virtual ...,c++,c,android-ndk,elf,dynamic-linking,C++,C,Android Ndk,Elf,Dynamic Linking,它们的数量实在太多了。结果,在加载动态链接器的过程中,会一遍又一遍地寻找相同的符号,浪费用户的时间。据我所知,仿生链接器无法缓存查找结果。因此,避免这些疯狂查找的唯一方法就是以某种方式将所有重新定位合并为一个 那么GCC/Clang是否有任何选项来控制这种场景的代码生成呢?可能是强制生成另一个重定位类型的选项,稍后链接器可能会将该重定位类型与其他对象模块中的类似重定位类型合并?它是未填充虚拟对象的包装器,因此您不能。

它们的数量实在太多了。结果,在加载动态链接器的过程中,会一遍又一遍地寻找相同的符号,浪费用户的时间。据我所知,仿生链接器无法缓存查找结果。因此,避免这些疯狂查找的唯一方法就是以某种方式将所有重新定位合并为一个


那么GCC/Clang是否有任何选项来控制这种场景的代码生成呢?可能是强制生成另一个重定位类型的选项,稍后链接器可能会将该重定位类型与其他对象模块中的类似重定位类型合并?

它是未填充虚拟对象的包装器,因此您不能。