1

对不起我的英语不太好。我会尽力的 :)

我正在尝试用 C 为我的卡西欧图形计算器编译一个插件。使用官方 SDK 时,这可以正常工作。因为它只适用于 Windows,所以我想使用 gcc。

所以我得到了sh-rtems-gcc和它来自 macports 的 binutils 并试图根据这个指令编译我的程序。我复制粘贴了描述的addin.ldcrt0.s并将我的main.clibfxsys.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

但它产生与上面相同的输出。

4

1 回答 1

1

我不能说确切的问题,但会这样调查:

  1. 找到包含缺失符号的库。用于nm查看符号名称
  2. Once you know which library contains the symbols make sure you're linking to it, and in the correct order. Try using recursive symbol resolution options -( -) with your linker.
于 2010-12-22T15:05:36.633 回答