keil 编译ARM程序出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keil 编译ARM程序出错相关的知识,希望对你有一定的参考价值。

..\OBJ\test.axf: Warning: L6310W: Unable to find ARM libraries.
..\OBJ\test.axf: Error: L6411E: No compatible library exists with a definition of startup symbol __main.
我先声明我没有装ADS,也配置了环境变量,但是还是编译出错,求大神指导


你看看这个环境变量路径是不是不对,我改了这个路径,再重启keil就没问题了

参考技术A main 函数申明: int main(void)
没有找到相应library.
参考技术B 这个要怎么解决 参考技术C 最后怎么解决的 参考技术D 关注这个问题

gcc 可以用 keil-arm 编译器编译的目标文件编译吗?

【中文标题】gcc 可以用 keil-arm 编译器编译的目标文件编译吗?【英文标题】:gcc can compile with object file compiled from keil-arm compiler? 【发布时间】:2015-09-20 15:57:24 【问题描述】:

项目芯片:nordic nrf51822 256KB NRF51 SDK 版本:6.1

由于许可证问题,我正在将我的项目从 windows keil 转换为 OSX GNU。

在我之前的项目中,keil-arm 编译器制作了一些 .o 文件。而且我没有那些c文件。

我尝试编译项目,当它尝试链接那些 .o 文件时,它会像这样错误退出。

gcc 不能用 keil-arm 编译器编译的目标文件编译?

... ... ... ... "/usr/local/gcc-arm-none-eabi-4_9-2015q2/bin/arm-none-eabi-gcc" -Xlinker -Map=_build/ ble_app_allb_s110_xxaa.map -mcpu=cortex-m0 -mthumb -mabi=aapcs -L ..//Source//templates/gcc/ -Tgcc_nrf51_s110_xxaa.ld _build/main.o _build/Sensor.o _build/Common.o _build/ble_nus .o _build/ble_srv_common.o _build/retarget.o _build/ble_advdata.o _build/app_timer.o _build/simple_uart.o _build/softdevice_handler.o _build/nrf_delay.o _build/pstorage.o _build/ble_conn_params.o _build/system_nrf51 .o _build/gcc_startup_nrf51.o adc.o afe4403.o mpu6050.o spi_master2.o twi_hw_master_sd.o -o _build/ble_app_allb_s110_xxaa.out /usr/local/gcc-arm-none-eabi-4_9-2015q2/bin/.. /lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld:错误:adc.o:冲突的 CPU 架构 12/0 / usr/local/gcc-arm-none-eabi-4_9-2015q2/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none -eabi/bin/ld: 未能合并文件 adc.o /usr/local/gcc-arm-none-eabi-4_9-2015q2/bin/../lib/gcc/arm- 的目标特定数据none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: 错误: afe4403.o: CPU 架构冲突 12/0 /usr/local/gcc-arm -none-eabi-4_9-2015q2/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld:未能合并文件 afe4403.o /usr/local/gcc-arm-none-eabi-4_9-2015q2/bin/../lib/gcc/arm-none-eabi/4.9.3/../ 的目标特定数据../../../arm-none-eabi/bin/ld:错误:mpu6050.o:冲突的 CPU 架构 12/0 /usr/local/gcc-arm-none-eabi-4_9-2015q2/bin/ ../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld:未能合并文件mpu6050.o的目标特定数据/usr/local/gcc-arm-none-eabi-4_9-2015q2/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm- none-eabi/bin/ld:错误:spi_master2.o:冲突的 CPU 架构 12/0 /usr/local/gcc-arm-none-eabi-4_9-2015q2/bin/../lib/gcc/arm-none- eabi/4.9.3/../../../../arm-none-eabi/bin/ld: 未能合并文件 spi_master2.o /usr/local/gcc-arm-none- 的目标特定数据eabi-4_9-2015q2/bin/../lib/gcc/arm-none-eabi/4.9。 3/../../../../arm-none-eabi/bin/ld:错误:twi_hw_master_sd.o:冲突的 CPU 架构 12/0 /usr/local/gcc-arm-none-eabi-4_9 -2015q2/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld:未能合并目标特定数据文件 twi_hw_master_sd.o /usr/local/gcc-arm-none-eabi-4_9-2015q2/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../ ../arm-none-eabi/bin/ld: Dwarf 错误: 找不到缩写数字 10。afe4403.o: 在函数 afe_write_reg': ....\RedCarrot_ver2(c)\afe4403.c:(.text+ 0x0): 未定义引用到_printf_percent'/usr/local/gcc-arm-none-eabi-4_9-2015q2/bin/../lib/gcc/arm-none-eabi/4.9.3/../../。 ./../arm-none-eabi/bin/ld: Dwarf Error: found dwarf version '0', 这个阅读器只处理版本 2、3 和 4 的信息。 ....\RedCarrot_ver2(c)\afe4403.c:(.text+0x0): 未定义引用 _printf_d' /usr/local/gcc-arm-none-eabi-4_9-2015q2/bin/../lib/ gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: Dwarf Error: found dwarf version '11822', 这个阅读器只处理版本 2 , 3 和 4 信息。 ....\RedCarrot_ver2(c)\afe4403.c:(.text+0x0): undefined reference to_printf_int_dec' /usr/local/gcc-arm-none-eabi-4_9-2015q2/bin/../lib/gcc /arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: Dwarf Error: found dwarf version '23598', 这个阅读器只处理版本 2, 3和4信息。 afe4403.o: 在函数 heartpulse': ....\RedCarrot_ver2(c)\afe4403.c:(.text+0x7a2): undefined reference to __2sprintf' /usr/local/gcc-arm-none-eabi-4_9-2015q2 /bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: _build/ble_app_allb_s110_xxaa.out: 隐藏符号`__2sprintf' 未定义 /usr/local/gcc-arm-none-eabi-4_9-2015q2/bin/../lib/gcc/arm-none-eabi/4.9.3/../../。 ./../arm-none-eabi/bin/ld:最终链接失败:错误值 collect2:错误:ld 返回 1 退出状态 make:* [_build/ble_app_allb_s110_xxaa.out] 错误 1

【问题讨论】:

当你不得不投反对票时,请告诉我出了什么问题。 不清楚你在问什么(虽然我没有投反对票)。 【参考方案1】:

简短回答:不,GCC 不能可靠地使用 Keil 生成的 .o 或 .a 文件。

虽然它们可能使用 ABI(arm 二进制接口),但 GCC 和 Keil 几乎可以肯定依赖于不同的 libc 实现,并且可以引用其他工具链不提供的函数。此外,调试信息可能不兼容(请参阅与 DWARF 相关的文本墙中的错误)。最后,虽然 ELF 是一种标准格式,但 ELF 文件中的很多内容和元数据不一定是标准的,并且每个工具链的处理方式略有不同。

不幸的是,最好将所有文件编译到一个工具链中。

【讨论】:

谢谢!但公司不想提供所有文件。【参考方案2】:

我想报告这是可能的!我已经这样做了,它有效!不过,您需要使用正确的标志来使用 GCC 进行编译。

【讨论】:

以上是关于keil 编译ARM程序出错的主要内容,如果未能解决你的问题,请参考以下文章

KEIL编译出错和memorymodel选择

使用 wxWidgets 库在 linux 中使用 codelite 进行 arm 交叉编译时出错

使用EmBitz编译下载程序后,有时运行出错的原因

ARM (UBOOT)编译出错问题

keil编译51和arm的问题,本人菜鸟。同个keil能编译51程序又能编译arm程序吗?如果能用哪个版本,多谢啦

keil c51编译器怎么有的文件出错时,双击错误提示没有定位到错误行,有的文件就可以,怎么回事