龙芯平台stream编译错误问题解决

执行命令:

 gcc -O2 stream.c

报错如下:

Dump relocate record:
stack top               relocation name         symbol
at /tmp/ccn99HNZ.o(.text+0x90):
...
0xffffffffffffffa0 R_LARCH_SOP_POP_32_S_10_16_S2        `<nameless>'

at /tmp/ccn99HNZ.o(.text+0x94):
0x0000000080007414 R_LARCH_SOP_PUSH_PCREL       `.LC1' + 2048(0x800)
0x0000000000001194 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SR       `<nameless>'
0x0000000000000001 R_LARCH_SOP_POP_32_S_5_20    `<nameless>'

at /tmp/ccn99HNZ.o(.text+0x98):
0x00000000000073e4 R_LARCH_SOP_PUSH_PCREL       `.LC1' + 4(0x4)
0x0000000000000994 R_LARCH_SOP_PUSH_PCREL       `.LC1' + 2052(0x804)
0x0000000000001194 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SR       `<nameless>'
0x0000000000000001 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SL       `<nameless>'
0x0000000000001000 R_LARCH_SOP_SUB      `<nameless>'
0xfffffffffffff994 R_LARCH_SOP_POP_32_S_10_12   `<nameless>'

at /tmp/ccn99HNZ.o(.text+0xe8):
0x0000000000000020 R_LARCH_SOP_PUSH_PCREL       `.L5'
0xffffffffffffffc8 R_LARCH_SOP_POP_32_S_10_16_S2        `<nameless>'

at /tmp/ccn99HNZ.o(.text+0x120):
0x0000000000007404 R_LARCH_SOP_PUSH_PLT_PCREL   `gettimeofday@@GLIBC_2.27'
0xfffffffffffff760 R_LARCH_SOP_POP_32_S_0_10_10_16_S2   `<nameless>'

at /tmp/ccn99HNZ.o(.text+0x12c):
0x0000740400000000 R_LARCH_SOP_PUSH_PCREL       `.LC0' + 2048(0x800)
0x00000000000010f4 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SR       `<nameless>'
0x0000000000000001 R_LARCH_SOP_POP_32_S_5_20    `<nameless>'

at /tmp/ccn99HNZ.o(.text+0x130):
0x00000000000073e4 R_LARCH_SOP_PUSH_PCREL       `.LC0' + 4(0x4)
0x00000000000008f4 R_LARCH_SOP_PUSH_PCREL       `.LC0' + 2052(0x804)
0x00000000000010f4 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SR       `<nameless>'
0x0000000000000001 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SL       `<nameless>'
0x0000000000001000 R_LARCH_SOP_SUB      `<nameless>'
0xfffffffffffff8f4 R_LARCH_SOP_POP_32_S_10_12   `<nameless>'

at /tmp/ccn99HNZ.o(.text+0x150):
0x0000000000000020 R_LARCH_SOP_PUSH_PCREL       `.LC2' + 2048(0x800)
0x00000000000010e0 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SR       `<nameless>'
0x0000000000000001 R_LARCH_SOP_POP_32_S_5_20    `<nameless>'

at /tmp/ccn99HNZ.o(.text+0x154):
0x0000000000000404 R_LARCH_SOP_PUSH_PCREL       `.LC2' + 4(0x4)
0x00000000000008e0 R_LARCH_SOP_PUSH_PCREL       `.LC2' + 2052(0x804)
0x00000000000010e0 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SR       `<nameless>'
0x0000000000000001 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SL       `<nameless>'
0x0000000000001000 R_LARCH_SOP_SUB      `<nameless>'
0xfffffffffffff8e0 R_LARCH_SOP_POP_32_S_10_12   `<nameless>'

at /tmp/ccn99HNZ.o(.text+0x160):
0x0000000000000000 R_LARCH_SOP_PUSH_PCREL       `.LC3' + 2048(0x800)
0x00000000000010d8 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SR       `<nameless>'
0x0000000000000001 R_LARCH_SOP_POP_32_S_5_20    `<nameless>'

at /tmp/ccn99HNZ.o(.text+0x164):
0x0000000080007404 R_LARCH_SOP_PUSH_PCREL       `.LC3' + 4(0x4)
0x00000000000008d8 R_LARCH_SOP_PUSH_PCREL       `.LC3' + 2052(0x804)
0x00000000000010d8 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SR       `<nameless>'
0x0000000000000001 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SL       `<nameless>'
0x0000000000001000 R_LARCH_SOP_SUB      `<nameless>'
0xfffffffffffff8d8 R_LARCH_SOP_POP_32_S_10_12   `<nameless>'

at /tmp/ccn99HNZ.o(.text+0x198):
0x0000000000000018 R_LARCH_SOP_PUSH_PCREL       `.L14'
0xfffffffffffffff0 R_LARCH_SOP_POP_32_S_0_5_10_16_S2    `<nameless>'

at /tmp/ccn99HNZ.o(.text+0x19c):
0x000000000000000c R_LARCH_SOP_PUSH_PCREL       `.LC4' + 2048(0x800)
0x00000000000010a4 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SR       `<nameless>'
0x0000000000000001 R_LARCH_SOP_POP_32_S_5_20    `<nameless>'

at /tmp/ccn99HNZ.o(.text+0x1a0):
0x00000000000011f8 R_LARCH_SOP_PUSH_PCREL       `.LC4' + 4(0x4)
0x00000000000008a4 R_LARCH_SOP_PUSH_PCREL       `.LC4' + 2052(0x804)
0x00000000000010a4 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SR       `<nameless>'
0x0000000000000001 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SL       `<nameless>'
0x0000000000001000 R_LARCH_SOP_SUB      `<nameless>'
0xfffffffffffff8a4 R_LARCH_SOP_POP_32_S_10_12   `<nameless>'

at /tmp/ccn99HNZ.o(.text+0x1b8):
0x0000080007414000 R_LARCH_SOP_PUSH_PCREL       `a' + 2048(0x800)
0x00000001017e71f0 R_LARCH_SOP_PUSH_ABSOLUTE    `<nameless>' + 12(0xc)
0x000000000000000c R_LARCH_SOP_SR       `<nameless>'
0x00000000001017e7 R_LARCH_SOP_POP_32_S_5_20    `<nameless>'

-- Record dump end --

/usr/bin/ld: /tmp/ccn99HNZ.o: in function `.L14':
(.text+0x1b8): relocation truncated to fit: R_LARCH_SOP_POP_32_S_5_20 against `<nameless>'
/usr/bin/ld: 最后的链结失败: symbol needs debug section which does not exist
collect2: error: ld returned 1 exit status

报错原因:

stream.c中定义了几个非常大的静态数组,导致访问超出界限,编译出错。

解决办法:

追加一个-mcmodel参数,例如:

 gcc -O2 stream.c -mcmodel=large

mcmodel可以取值:extreme large normal tiny tiny-static

具体取哪个看代码定义的数组的大小,详情见gcc手册。

在龙芯上使用如下命令后还会报错:

gcc -O2 stream.c -mcmodel=extreme

报错内容:

[root@localhost stream-5.9-1]# gcc -O2 stream.c -mcmodel=extreme
stream.c: In function ‘checktick’:
stream.c:317:5: sorry, unimplemented: loongarch cmodel extreme and tiny-static not support plt.
     }
     ^
stream.c:317: confused by earlier errors, bailing out
Preprocessed source stored into /tmp/cc4yuYoG.out file, please attach this to your bugreport.

可以再加入--no-plt解决:

gcc -O2 stream.c -mcmodel=extreme --no-plt

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值