GCC-链接失败

GCC-链接失败,gcc,linker-errors,rtems,Gcc,Linker Errors,Rtems,对不起,我的英语不是很好。我会尽力的:) 我正在尝试用C语言为我的卡西欧图形计算器编译一个加载项。当使用官方SDK时,它可以正常工作。因为它只适用于Windows,所以我想使用gcc 所以我从macports得到了sh rtems gcc和它的binutils,并试图根据它编译我的程序。我复制粘贴了所描述的addin.ld和crt0.s,并将main.c和libfxsys.a(来自与上述说明相同的人)放在同一个目录中。子目录include包含fxsys的标题。我用nm验证了.a文件中是否存在库的

对不起,我的英语不是很好。我会尽力的:)

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

所以我从macports得到了sh rtems gcc和它的binutils,并试图根据它编译我的程序。我复制粘贴了所描述的addin.ld和crt0.s,并将main.c和libfxsys.a(来自与上述说明相同的人)放在同一个目录中。子目录include包含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验证了这一点

我已经在命令中使用了库的位置,因为在谷歌的其他帖子中经常提到这是失败的原因,但没有成功。我还尝试添加和删除上述说明中使用的-lgcc选项,但没有成功

我的主机是Intel Mac,OS X 10.6

因为我不知道如何解决这个问题,并且开始编译我的程序,我不得不问:我做错了什么?我如何在不使用SDK的情况下编译程序

提前感谢,, 赛托布兹

编辑:

我还尝试链接到:

sh-rtems-ld -EB -L. -o myaddin.elf -Taddin.ld crt0.o --start-group main.o libfxsys.a --end-group

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

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

  • 查找包含缺少符号的库。使用
    nm
    查看符号名称
  • 一旦您知道哪个库包含这些符号,请确保以正确的顺序链接到它。尝试在链接器中使用递归符号解析选项
    -(
    -)

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

  • 查找包含缺少符号的库。使用
    nm
    查看符号名称
  • 一旦您知道哪个库包含这些符号,请确保以正确的顺序链接到它。尝试在链接器中使用递归符号解析选项
    -(
    -)

  • 对不起,我没有表达清楚。。。我已经确定所有缺少的符号都在libfxsys.a中。我用-lfxsys链接到它。但我不知道你所说的递归符号解析选项是什么意思,快速的谷歌搜索也没有发现任何东西。你能给我解释一下吗?默认情况下,binutils链接器ld只会从库中提取一个符号,如果它已经看到的代码已经请求了它。所以“ld foo.lib和needsfoolib.o”将不起作用,您需要“ld needsfoolib.o foo.lib”或使用递归符号解析选项,如“ld--start group foo.lib needsfoolib.o--end group”。有关“manld”的更多信息,请查看--start group--end group--AKA-(and-)--选项。我已经尝试过了(请参见命令的问题),但它产生的错误与以前相同。还有其他想法吗?
    nm
    在main.o和libfxsys.a上。确切的符号名称是否真的存在,使用正确的“T”或“T”类型(文本seg)而不是“U”或“U”(未定义)?好的,我知道了。Main试图调用(例如)_locate(),但此库定义了locate()。更改lib源代码中的一些行解决了我的问题。非常感谢你!!对不起,我没有表达清楚。。。我已经确定所有缺少的符号都在libfxsys.a中。我用-lfxsys链接到它。但我不知道你所说的递归符号解析选项是什么意思,快速的谷歌搜索也没有发现任何东西。你能给我解释一下吗?默认情况下,binutils链接器ld只会从库中提取一个符号,如果它已经看到的代码已经请求了它。所以“ld foo.lib和needsfoolib.o”将不起作用,您需要“ld needsfoolib.o foo.lib”或使用递归符号解析选项,如“ld--start group foo.lib needsfoolib.o--end group”。有关“manld”的更多信息,请查看--start group--end group--AKA-(and-)--选项。我已经尝试过了(请参见命令的问题),但它产生的错误与以前相同。还有其他想法吗?
    nm
    在main.o和libfxsys.a上。确切的符号名称是否真的存在,使用正确的“T”或“T”类型(文本seg)而不是“U”或“U”(未定义)?好的,我知道了。Main试图调用(例如)_locate(),但此库定义了locate()。更改lib源代码中的一些行解决了我的问题。非常感谢你!!也许
    sh-rtems-gcc-4.2.3
    -v
    (详细)选项,可以给你一个提示我已经尝试过了,但没有提供相关信息。。。无论如何谢谢你!也许
    sh-rtems-gcc-4.2.3
    -v
    (详细)选项,可以给你一个提示我已经尝试过了,但没有提供相关信息。。。无论如何谢谢你!