GCC-链接失败
对不起,我的英语不是很好。我会尽力的:) 我正在尝试用C语言为我的卡西欧图形计算器编译一个加载项。当使用官方SDK时,它可以正常工作。因为它只适用于Windows,所以我想使用gcc 所以我从macports得到了sh rtems gcc和它的binutils,并试图根据它编译我的程序。我复制粘贴了所描述的addin.ld和crt0.s,并将main.c和libfxsys.a(来自与上述说明相同的人)放在同一个目录中。子目录include包含fxsys的标题。我用nm验证了.a文件中是否存在库的所有函数 使用此命令进行编译时: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文件中是否存在库的
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
(详细)选项,可以给你一个提示我已经尝试过了,但没有提供相关信息。。。无论如何谢谢你!