链接到";gcc“;而不是",;ld";-图书馆问题

链接到";gcc“;而不是",;ld";-图书馆问题,gcc,linker,Gcc,Linker,我希望使用GCC驱动程序(“GCC”)而不是“ld”执行链接(以便启用) “gcc”的行为似乎与“ld”完全不同,并且不接受某些相同的命令行选项。更糟糕的是,我觉得我在图书馆方面遇到了问题。使用“gcc”进行链接,我得到了一些“未定义的引用”错误。其中许多是对“运算符新(无符号整数)”的未定义引用,以及对“\uuuuAEABI\uUNWIND\uCPP\uPR0”的未定义引用 在我的设置中,提供函数如new的库是Newlib。我正在e2 Studio中开发—Eclipse的一个变体,是为Rene

我希望使用GCC驱动程序(“GCC”)而不是“ld”执行链接(以便启用)

“gcc”的行为似乎与“ld”完全不同,并且不接受某些相同的命令行选项。更糟糕的是,我觉得我在图书馆方面遇到了问题。使用“gcc”进行链接,我得到了一些“未定义的引用”错误。其中许多是对“运算符新(无符号整数)”的
未定义引用
,以及对“\uuuuAEABI\uUNWIND\uCPP\uPR0”的
未定义引用

在我的设置中,提供函数如
new
的库是Newlib。我正在e2 Studio中开发—Eclipse的一个变体,是为Renesas MCU开发而构建的。e2 Studio被配置为给我一个“预构建”版本的Newlib,而不是每次构建时都构建Newlib

在我的makefile中,链接是通过“ld”完成的,工作正常:

arm-none-eabi-ld
-o "RZ_A1H_USB_Host_Func_RSK.x"
-T"E:/Renesas e2 workspace/RZ_A1H_USB_Host_Func_RSK\HardwareDebug\LinkerSubCommand.tmp"
-T"E:\Renesas e2 workspace\RZ_A1H_USB_Host_Func_RSK\compiler_specific\GNU_e2studio-IRAM.ld"
$(USER_OBJS) $(LIBS) $(LIBRARY_GENERATOR_OUTPUTTYPE_OUTPUTS)
-L"C:\PROGRA~2\KPIT\GNUARM~1.02-\ARM-NO~1\ARM-NO~1/lib/gcc/arm-none-eabi//4.9-GNUARM-NONE_v14.02/interwork" -L"C:\PROGRA~2\KPIT\GNUARM~1.02-\ARM-NO~1\ARM-NO~1/lib/gcc/arm-none-eabi/4.9-GNUARM-NONE_v14.02/interwork"
-L"C:\PROGRA~2\KPIT\GNUARM~1.02-\ARM-NO~1\ARM-NO~1/arm-none-eabi/lib/interwork"
-lm
-lstdc++
-lc
-lgcc
-estart
但是,我所要做的就是用
arm none eabi gcc
替换
arm none eabi ld
,这会导致上述“未定义引用”错误


有什么线索吗?我需要告诉“gcc”一些我不需要告诉“ld”的事情?非常感谢你的帮助。

最终解决了我自己的问题。输入文件是在一个外部文件中指定的,该文件被以下位引用:
-T“E:/Renesas e2 workspace/RZ_A1H_USB_Host_Func_RSK\HardwareDebug\LinkerSubCommand.tmp”


以正常方式指定输入文件解决了问题。

有些文件是GCC复制的,对于那些不是的文件,您可以使用
-Wl
指定发送到实际链接器的选项(请参见链接参考的底部)。啊,谢谢,我想知道如何指定这些额外的选项。然而,主要的问题似乎是简单地将命令从“ld”更改为“gcc”会导致所有这些“未定义的引用”错误。我需要特别告诉gcc什么吗?当你链接到gcc时,你是使用
gcc
命令还是
g++
命令?因为如果你链接到<代码> GCC ,那么C++运行时不会自动链接。如果你连接了一个C++程序,那么就使用<代码> G++< /COD>。谢谢,我一直在使用<代码> GCC < /C>,但是即使使用<代码> G++< /C>也有同样的问题。它抱怨对很多东西的引用都没有定义,包括
sqrt
round
\uuuuuuaeabi\uui2f
strcmp
free
malloc
\uuucxa\upure\uvirtual
,等等。但是如果我只使用与命令行选项完全相同的
ld
,那么一切都可以完美地工作。