我正在尝试在 arm debian 机器(树莓派)上链接一个简单的 c 程序,当链接 ogject 文件时,链接器返回主题中的错误。
我的程序很简单
simple.c:
int main(){
int a = 2;
int b = 3;
int c = a+b;
}
我用它编译
$>gcc -o simple.obj simple.c
然后将其与
$>ld -o simple.elf simple.obj
ld: simple.obj: access beyond end of merged section (33872)
我不明白为什么...如果我尝试使用它读取 elf 文件,objdump -d
它无法反编译该.text
部分(它只打印地址、值.word
和以 0x 开头的再次值)但二进制数据与我从反编译的simple.obj
.
唯一的区别在于二进制数据的加载开始(和后续)地址:elf 文件从 0x8280 开始,目标文件从 0x82a0 开始。
这是什么意思呢?
编辑:
这是 obj 文件的转储:http: //pastebin.com/YZ94kRk4
这是精灵文件的转储:http: //pastebin.com/3C3sWqrC
我尝试使用 -c 选项进行编译,该选项使 gcc 在组装时间后停止(它已经完成了链接部分)但现在我有一个不同的问题:它说我的目标文件中没有 _start 部分......
新的转储是:
simple.obj:http ://pastebin.com/t0TqmgPa
simple.elf:http ://pastebin.com/qD35cnqw