小编Sei*_*ios的帖子

在实践中是否有可能将数百万个小函数编译成静态二进制文件?

我创建了一个包含大约 200 万个小函数的静态库,但在 Linux x86_64 下使用 GCC(测试过 4.8.5 或 7.3.0)将其链接到我的主函数时遇到问题。

链接器抱怨重定位截断,与这个问题中的非常相似。

我已经尝试过使用-mcmodel=large,但正如同一问题的答案所说,我“需要一个可以处理完整 64 位地址的 crt1.o”。然后我尝试按照这个答案编译一个,但最近的 glibc 不会在 下编译-mcmodel=large,即使 libgcc 可以编译,这也没有完成任何任务。

我也尝试过添加标志-fPIC和/或-fPIE无济于事。我得到的最好的结果是这个唯一的错误:

ld:转换GOTPCREL重定位失败;使用 --no-relax 重新链接

添加该标志也没有帮助。

我在互联网上搜索了几个小时,但大多数帖子都很旧,我找不到方法来做到这一点。

我知道这不是一个常见的尝试,但我认为应该可以做到这一点。我在 HPC 环境中工作,因此内存或时间限制不是这里的问题。

有没有人使用最新的编译器和工具链成功完成类似的事情?

c linux linker static x86-64

5
推荐指数
1
解决办法
525
查看次数

标签 统计

c ×1

linker ×1

linux ×1

static ×1

x86-64 ×1