错误:L6218E:未定义的符号main(引自__rtentry2.o)

问题描述 投票:2回答:3

谁都可以帮帮我?我的主板是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.
arm keil
3个回答
0
投票

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

  1. 删除旧项目并创建新项目
  2. 从Manage Run Time Environment中选择真正的库,如下所示:
  3. 配置“目标选项”段。定义符号USE_STDPERIPH_DRIVER并定义项目路径,如下所示:
  4. 测试您的配置。请写下面的代码: #include "stm32f10x.h" // Device header int main() { }

0
投票

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

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

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

在此动机之后,现在我们可以将main()函数称为main()符号。

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

解决方案:

对于Kiel IDE,要为源文件排队以进行编译;您必须在“源组”类别中将其列入候选名称,方法是单击右键,将新文件添加到组或将现有文件添加到组。它将导致如下图所示:

source that contains *main* function must be added to Source Group category in Keil IDE

现在我们有一个main函数,稍后将其转换(定义)为主符号,并由链接器发现它可以将其引用到任何其他可重定位目标文件中使用它。


-1
投票

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/14222.html这应该有所帮助。只需创建一个虚拟的main()或main.c文件。链接器无法在您的pjt中找到它。

© www.soinside.com 2019 - 2024. All rights reserved.