【发布时间】:2017-11-03 04:02:47
【问题描述】:
目前,我正在学习 RISC-V,使用 RISC-V 工具链,并为我的嵌入式编辑一个新的 ld 脚本。我写了一个例子,编译看操作码。
示例:
#include <stdio.h> //float.c
int main()
{
float a=1.04;
printf("a=%f\n",a);
return 0;
}
我的步骤是:
1. riscv64-unknown-elf-gcc -S float.c *//generate assembly code*
2. riscv64-unknown-elf-as float.s -o float.o *//generate obj file*
3. riscv64-unknown-elf-ld -T elf64lriscv1.x float.o *//use own script to link, -T is using other script*
然后,它会显示 "float.c:(.text+0x50): undefined reference to `printf'
我试试
添加-lc参数,但不起作用,它会显示更多未定义的消息。
我的 ld 脚本
OUTPUT_FORMAT("elf64-littleriscv", "elf64-littleriscv","elf64-littleriscv")
OUTPUT_ARCH(riscv)
ENTRY(_start)
SEARCH_DIR("/path/to/install/riscv/toolchain/riscv64-unknow-elf/lib");
/*MEMORY{ //for my embedded allocation
flash : org = 0x0, l = 0x10000
ram : org= 0x10000, l = 512
}*/
SECTIONS{
_start =0x10000;
.text :
{
*(.text)
}
.bss :
{
*(.bss)
*(.sbss)
}}
另外,我正在尝试使用默认脚本,比如这个命令:
$ riscv-unknown-elf-ld float.o -o float
但结果是一样的...... 请帮帮我!
问候!
【问题讨论】:
-
您不仅需要学习 RISC-V,还需要学习更多内容。见norvig.com/21-days.html
-
顺便说一句,你为什么不在你的 RISCV-V 上使用 Linux 呢?这可能会更容易,即使 Linux 在该平台上还没有完全成熟......
-
我在 linux 上有一个 RISCV VM,我使用 CCS 重新定位到我的 MCU(TI 320F28335),现在我正在尝试编译 C 代码(工具链在 linux 上)并获取 RISCV 指令加载到MCU并执行
-
我的猜测是你缺乏很多技能和知识。您可能需要数月或数年的努力才能获得它们。你想要达到的目标比你想象的要困难和复杂得多(因为你需要学习很多东西)。我建议在你的 RISCV 硬件上运行 Linux(即使它是一些虚拟的)。
-
是的......我每天都在学习很多新知识......这对我来说很难