小编Cry*_*per的帖子

如何创建静态链接共享库

对于我的硕士论文,我正在尝试为ARM Cortex-M3嵌入式系统调整共享库方法.由于我们的目标板没有MMU,我认为使用"普通"动态共享库是没有意义的.因为.text是直接从flash执行的,并且.data在启动时被复制到RAM,所以我无法解决相对于代码的.data,因此GOT也是如此.必须通过必须在链接时定义的绝对地址来访问GOT.那么为什么不在链接时为所​​有符号分配固定的绝对地址......?

"链接器和加载器"一书中我了解到"静态链接共享库,即库中程序和数据地址在链接时绑定到可执行文件的库".链接的章节描述了如何创建这些库,并提供对Unix System V,BSD/OS的引用; 还提到了Linux和它的uselib()系统调用.不幸的是,本书没有提供如何实际创建诸如工具和/或编译器/链接器开关之类的库的信息.除了那本书之外,我几乎没有找到任何关于这些"野外"图书馆的信息.我在这方面唯一发现的是Linux的预链接.但是,由于这是在"正常"的动态库上运行,而不是我正在寻找的.

我担心这些库的使用是非常具体的,因此不存在创建它们的常用工具.虽然在这种情况下提到的uselib()系统调用让我感到疑惑.但是我想确保在开始破解我自己的链接器之前我没有忽略任何东西......;)那么有人能给我更多关于这些库的信息吗?

此外,我想知道是否有任何gcc/ld开关链接和重定位文件,但保留文件中的重定位条目 - 以便它可以重新重新定位?我找到了"-r"选项,但完全跳过了重定位过程.有没有人有想法?

编辑:

是的,我也知道链接器脚本.随着gcc libfoo.c -o libfoo -nostdlib -e initLib -Ttext 0xdeadc0de我设法得到某种链接和重新定位的目标文件.但到目前为止,我还没有找到任何可能将主程序与此链接并将其用作共享库的可能性.(链接器将拒绝链接动态共享库的"常规方式".)

c arm shared-libraries ld static-linking

9
推荐指数
2
解决办法
1912
查看次数

标签 统计

arm ×1

c ×1

ld ×1

shared-libraries ×1

static-linking ×1