关于编译器全局符号定位的问题

2019-07-20 08:15发布

本人使用gnu工具链生成elf文件,但是不知道如何像armcc一样利用__attribute__((at(adress)))一样给变量定位地址,网上看到说一个是用__attribute__((section("section_name")))配合链接脚本定义自定义段,另一个是直接在链接脚本里对符号定位地址,但是前者并不能正确定位到我想要的地址,而后者是可行的,但不知道会不会对内部可见链接符号产生影响。所以想请教一下如何用后者来分配地址。使用的链接脚本如下:
SECTIONS
{
        varName = 0x20000000;
}
以上为利用链接脚本重定位varName; 实际运行可行;

SECTIONS
{
  mySection 0x20000000 : {
   *(mySection)
   }
}
以上为利用链接脚本定义mySection段,然后在全局变量定义时使用__attribute__((section("mySection")))进行重定位
该方法不可行;


本人计算机基础比较差,还请见谅
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
ISO14882
1楼-- · 2019-07-20 12:58
参考了 http://sourceware.org/binutils/docs/ld/Scripts.html#Scripts 上GNU官方关于链接脚本的说明,脚本把地址定位在了VMA上不一定是绝对地址有操作系统且支持虚拟内存的话需要用AT(),而前者直接对全局符号指派地址,类似于at。实际上两者都可以

中文文档在这里  https://blog.csdn.net/yyww322/article/details/50827418/
另外觉得link script比scatter file能做的事情多一些,但是比较麻烦
正点原子
2楼-- · 2019-07-20 15:02
帮顶
ISO14882
3楼-- · 2019-07-20 20:20
 精彩回答 2  元偷偷看……

一周热门 更多>