对不起我的英语不太好。我会尽力的 :)
我正在尝试用 C 为我的卡西欧图形计算器编译一个插件。使用官方 SDK 时,这可以正常工作。因为它只适用于 Windows,所以我想使用 gcc。
所以我得到了sh-rtems-gcc和它来自 macports 的 binutils 并试图根据这个指令编译我的程序。我复制粘贴了描述的addin.ld和crt0.s并将我的main.c和libfxsys.a(来自与上述说明相同的人)放在同一目录中。子目录包含包含 fxsys 的标头。我用 nm 验证了 .a 文件中库的所有功能是否存在。
使用此命令进行编译时:
sh-rtems-gcc-4.2.3 -m3 -mb -nostdlib -I./include -c crt0.s main.c
一切正常。但后来我试图链接:
sh-rtems-gcc-4.2.3 -m3 -mb -nostdlib -L. -o myaddin.elf -Taddin.ld crt0.o main.o -lfxsys
并得到以下错误:
main.o: In function `__main':
main.c:(.text+0x248): undefined reference to `_Bdisp_AllClr_VRAM'
...
... (--- cut 16 other errors in the same format ---)
...
main.c:(.text+0x360): undefined reference to `_Sleep'
./libfxsys.a(locate.o): In function `_locate':
locate.c:(.text+0x28): undefined reference to `_locate_OS'
collect2: ld gab 1 als Ende-Status zurück
所有缺少的符号都在libfxsys.a中。我已经用 nm 验证了这一点。
我已经在命令中使用了库的位置,因为在 google 中找到的其他帖子中,这经常被称为失败的根源,但没有成功。我还尝试添加和删除上述说明中使用的-lgcc选项,但没有成功。
我的主机是 Intel Mac,OS X 10.6
因为我不知道如何解决这个问题,并开始编译我的程序,所以我不得不问:我做错了什么?如何在不使用 SDK 的情况下编译我的程序?
提前致谢, xythobuz
编辑:
我也尝试过链接:
sh-rtems-ld -EB -L. -o myaddin.elf -Taddin.ld crt0.o --start-group main.o libfxsys.a --end-group
但它产生与上面相同的输出。