Arm 错误:L6218E:未定义的主符号(参考u rtentry2.o)

Arm 错误:L6218E:未定义的主符号(参考u rtentry2.o),arm,keil,Arm,Keil,有人能帮我吗??我的电路板是LPC1768,传感器是BMP180 Rebuild target 'Target 1' compiling BMP180.c... compiling I2C.c... assembling startup_LPC17xx.s... compiling system_LPC17xx.c... compiling GPIO_LPC17xx.c... compiling PIN_LPC17xx.c... linking... .\Objects\asdsa.axf: E

有人能帮我吗??我的电路板是LPC1768,传感器是BMP180

Rebuild target 'Target 1'
compiling BMP180.c...
compiling I2C.c...
assembling startup_LPC17xx.s...
compiling system_LPC17xx.c...
compiling GPIO_LPC17xx.c...
compiling PIN_LPC17xx.c...
linking...
.\Objects\asdsa.axf: Error: L6218E: Undefined symbol main (referred from __rtentry2.o).
Not enough information to list image symbols.
Finished: 1 information, 0 warning and 1 error messages.
".\Objects\asdsa.axf" - 1 Error(s), 0 Warning(s).
Target not created.
这应该会有所帮助。
只需创建一个伪main()或main.c文件。链接器在pjt中找不到它。

我通过以下步骤解决了这个问题

  • 删除旧项目并创建新项目
  • 从管理运行时环境中选择true library,如下所示:
  • 配置“目标选项”段。定义符号
    使用\u STDPERIPH\u DRIVER
    并定义项目路径,如下所示:
  • 测试您的配置。请编写以下代码:

     #include "stm32f10x.h"                  // Device header
    
     int main() {
     }
    

  • 我发现解决方案很简单,但在深入研究解决方案之前,请记住C编译单元(至少是C编译器和汇编程序)在解析必要的预处理器指令后编译每个纯C源文件,并在编译后生成一个可重新定位的目标文件

    在编译单元完成其工作后,还有另一个单元负责将成功编译的每个源文件单独合并为一个大对象文件的可重定位形式。此单元称为链接器,此操作称为链接

    可重定位对象文件的一个非常重要的特性是,到目前为止,所谓的变量函数将被标记为符号。链接器必须解析符号,定义对象文件中最初定义的内容,将另一个文件中使用的内容引用到其原始对象文件中

    在这个动机之后,现在我们可以调用main()函数作为main()符号

    我发现问题是因为没有编译包含main()函数的源文件。因此,不存在包含与main()函数对应的符号的可重定位对象文件。因此,编译器在抱怨:您要求我使用(引用)一个保证在另一个文件中找到(定义)的符号,但我没有发现这样的符号

    解决方案:

    对于kielide,将源文件排队进行编译;您必须在“源组”类别中将其列入短名单,方法是单击鼠标右键,将新文件添加到组中,或将现有文件添加到组中。它将导致类似下图的结果:


    现在我们有了一个main函数,稍后将其转换(定义)为main symbol,并由链接器找到,以将其引用到任何其他可重新定位的对象文件中使用它的内容。

    对于解决方案,只需将此文件C添加到驱动程序文件夹并对其进行翻译,
    我也有同样的问题。问题是
    .c
    文件中的函数名与
    .h
    文件中的函数名不同,我不知道。

    只需通过展开目标,然后右键单击源组,将您的c文件(例如:“main.c”)添加到源组(例如:“源组1”),选择将现有文件添加到组“您的源组”,然后选择主.c文件