Compiler errors 链接期间出错:未定义对函数的引用

Compiler errors 链接期间出错:未定义对函数的引用,compiler-errors,linker,arm,embedded,Compiler Errors,Linker,Arm,Embedded,目前,我正在尝试使用SEGGER为AT91SAM7S256编译二进制文件,并且在链接阶段(源文件全部编译良好)遇到了一个问题,其中任何使用“lib_AT91SAM7S64.h”的文件在尝试链接时都有多个未定义的引用 以下是一些错误消息的示例: Output/Executable_1 Debug/Obj/AdcInterface.o: In function `initializeADCInterface': undefined reference to `AT91F_PIO_CfgInput'

目前,我正在尝试使用SEGGER为AT91SAM7S256编译二进制文件,并且在链接阶段(源文件全部编译良好)遇到了一个问题,其中任何使用“lib_AT91SAM7S64.h”的文件在尝试链接时都有多个未定义的引用

以下是一些错误消息的示例:

Output/Executable_1 Debug/Obj/AdcInterface.o: In function `initializeADCInterface':
undefined reference to `AT91F_PIO_CfgInput'
undefined reference to `AT91F_PIO_InterruptEnable'
undefined reference to `AT91F_PIO_GetInterruptStatus'
问题是这些“未定义”的函数是在“lib_AT91SAM7S64.h”文件中定义的。我不知道该怎么办,因为我以前在链接阶段从未遇到过错误


我没有使用任何makefile或任何东西。这个项目最初是使用Green Hills软件开发的,但它在IDE上编译和构建时没有问题。但是,我没有访问Green Hills软件的权限,一直在尝试让SEGGER编译此文件。

几乎可以肯定,您没有链接到包含这些函数的实际代码的库中。.h只定义它们,以便其他代码可以正确调用这些函数


您必须(以某种方式)指定包含这些符号的
.a
。我不确定这是否意味着您需要编辑makefile,或者向项目中添加一些.a,或者在IDE中指定要构建的硬件。对不起,我没有使用SEGGER,所以我不知道这些细节。希望这足以推动您找到解决方案。

几乎可以肯定,您没有在库中链接到这些函数的实际代码。.h只定义它们,以便其他代码可以正确调用这些函数


您必须(以某种方式)指定包含这些符号的
.a
。我不确定这是否意味着您需要编辑makefile,或者向项目中添加一些.a,或者在IDE中指定要构建的硬件。对不起,我没有使用SEGGER,所以我不知道这些细节。希望这足以推动您找到解决方案。

这些函数可能在.h文件中声明,但在.h文件中没有定义。您是如何在项目属性或命令行中指定库文件的?它们真的是在头中定义的(即静态内联实现)还是刚刚声明的,因为没有进一步的细节,它看起来就像是典型的“忘记将外部库传递给链接器”或“以错误的顺序链接相互依赖的对象”问题,这正是不同IDE生成的生成命令之间可能存在差异的类型。谢谢,不是这样。结果表明,头文件中存在一些声明问题。使用了“内联”,因此我在文件顶部添加了一个定义#定义内联静态内联“与确实存在的未定义函数相关的问题消失了。这些函数的可能重复项可能会在.h文件中声明,但它们没有在.h文件中定义。”。您是如何在项目属性或命令行中指定库文件的?它们真的是在头中定义的(即静态内联实现)还是刚刚声明的,因为没有进一步的细节,它看起来就像是典型的“忘记将外部库传递给链接器”或“以错误的顺序链接相互依赖的对象”问题,这正是不同IDE生成的生成命令之间可能存在差异的类型。谢谢,不是这样。结果表明,头文件中存在一些声明问题。使用了“内联”,因此我在文件顶部添加了一个定义#定义_uinline static inline”和与确实存在的未定义函数相关的问题消失了