优化弱符号查找
Optimizing weak symbols lookup
如果您曾经尝试在任何c++程序中使用nm实用程序,您可能已经注意到许多符号被标识为'V'或'W'。两者都是不同类型的弱符号
现在,在可执行文件中有大量的弱符号是不好的,因为在运行时动态链接器会尝试解析它们。我在想,在链接可执行文件时,通过执行一个简单的约定可以节省很多时间:
- 每当在可执行文件中创建弱符号时,如果该符号有默认值,则将其提升为常规符号。
这个hack在我看来是安全的,因为:
- 如果任何库定义了具有相同名称的弱符号,它将被提升的弱符号覆盖,这是好的,因为对于弱符号,我们可以自由选择任何定义
- 如果没有库实际定义这样的符号…没有什么特别的事情发生
- 如果库定义了可执行文件中没有定义的弱符号,则一切正常。
在我尝试与binutils开发人员讨论这个问题之前,我是否错过了一个巨大的错误?
我看不出有什么能阻止你所描述的工作。
然而,我确实怀疑这是否值得做。我很确定这也是"binutils开发人员"想知道的。
所以我建议你看几件事:在典型情况下,在可执行文件和动态库中定义相同的符号的频率是多少?
因为很可能仍然有大量的弱符号没有在可执行文件中定义,你实际节省了多少时间?
改进的现有程序的一些例子,或者至少回答了"对于应用程序X,查找弱符号平均花费这么多时间,这是潜在的增益吗?"
这就是我作为一个binutils开发人员所寻找的[我不是其中之一,但如果我是]。
相关文章:
- 使用gcc从静态链接的文件中查找可选符号
- 与Qt交叉编译到Raspberry Pi 3B+通讯录(协议缓冲区)-错误符号查找错误
- 符号查找错误未定义的符号:curl_mime_init
- 即使存在NM报告符号,在运行时的符号查找错误也是如此
- 使用 dlsym 查找命名空间中符号的符号
- 指向符号的指针与常规符号查找的 ABI 稳定性
- Orocos LTTng 符号查找错误:/path/to/liborocos-rtt-traces-gnulinux.s
- caffe convert_imageset:符号查找错误
- 建筑x86_64的未定义符号 - 如何查找丢失的文件
- 动态链接到 c++ 静态成员字段时符号查找失败
- 部署后的Linux qt应用程序-符号查找错误:libQt5Core.so.5未定义的符号:uncv_getDefaul
- 查找最大的无符号 int ....为什么这不起作用?
- 访问Boost Bind时,共享库中的C 符号查找错误
- C 需要从数组中查找符号
- 查找符号时,程序不会从正确的库中搜索
- LD_BIND_NOW:符号查找错误,但可执行文件仍在运行
- 如何捕捉符号查找错误
- 查找符号链接指向的位置(Windows)
- GCC—gc-sections和查找符号依赖项
- 查找符号相关性的起源