【发布时间】:2017-09-09 13:57:46
【问题描述】:
我正在编写一个静态链接 SDL2 的共享库。因此,我使用-fPIC 编译了 SDL2 和我的共享库。我注意到,不使用-fPIC,最终共享库大小约为 940 KB,而使用 -fPIC,最终共享库大小约为 1.4 MB。
为什么使用-fPIC 编译的共享库比没有-fPIC 编译的共享库大得多?
测试是在 Raspberry Pi 2 上完成的,因此目标架构是 ARMv7A 或 ARMv8(A)。
【问题讨论】:
-
旁注:“目标架构是arm”->“ARM”。 ARM 有很多非常不同的架构。 ARMv7A != ARMv7M != ARMv8 等。您的问题无法回答,例如 library-size != code-size。
-
嗯,我提到我在 Raspberry Pi 2 上进行了测试,所以很明显我说的是 armv7a。我不明白为什么不能回答这个问题。我只想知道为什么在使用
-fPIC时会出现大小爆炸。我认为这是一个非常明确的问题。 -
Rasberry Pi 2 使用了两种截然不同的 ARM 内核:Cortex-A7 和 A53。 A53 实际上不是 ARMv7A,而是 V8(A)!这不是您问题的唯一问题
-
您的编辑并没有让这个网站变得更好。我给了你很多相关的提示;如果您不了解它们,那么进行一些研究怎么样?您不会在一小时内学习编程,也不会通过勺子喂食。你能指望什么?水晶球?查机器码,objdump显示什么不清楚?你自己检查有什么问题?了解如何使用您拥有的工具并使用它们,它们可以告诉您您需要知道的一切。
-
根据架构的不同,使代码与位置无关会产生开销。我不认为增加 30% 是值得警惕的。如果你真的很好奇,构建一个两种形式的最小库,然后查看反汇编。
标签: c gcc compilation