求教,GCC连接脚本的一个问题
用GCC编译程序的时候,连接脚本xxx.lds 文件如下所示:
SECTIONS {
. = 0x00000000;
.init : AT(0){./obj/2440start.o}
. = 0x30000000;
.text : AT(4096){ *(.text) }
.rodata ALIGN(4) : {*(.rodata)}
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}
编译的时候会有错误提示
但是将2440start.o的路径写成绝对路径:/home/piaoliuzaiwai/test01/code/obj/2440start.o 这样编译的时候就没有问题。
请问这个错误是路径的问题导致的吗?在连接脚本lds中应该怎样写 相对路径??
SECTIONS {
. = 0x00000000;
.init : AT(0){./obj/2440start.o}
. = 0x30000000;
.text : AT(4096){ *(.text) }
.rodata ALIGN(4) : {*(.rodata)}
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}
编译的时候会有错误提示
捕获.JPG (17.69 KB, 下载次数: 4)
但是将2440start.o的路径写成绝对路径:/home/piaoliuzaiwai/test01/code/obj/2440start.o 这样编译的时候就没有问题。
请问这个错误是路径的问题导致的吗?在连接脚本lds中应该怎样写 相对路径??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
链接脚本里的定义的文件名是按照字符串比较进行匹配的
例如链接的命令行是
ld ... obj/2440start.o ...
链接脚本写的是
init : AT(0){./obj/2440start.o}
ld会认为./obj/2440start.o和obj/2440start.o是不同的文件,因此会对obj/2440start.o进行两次链接,因此会出现重定义错误
非常感谢楼上的回复,问题已经解决了。