找回密码
 立即注册
查看: 120|回复: 11

Keil C51 报错 L218: NOT AN OBJECT FILE 怎么解决

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-07-07 20:12:16

1

主题

4

回帖

15

积分

新手上路

积分
15
发表于 2026-7-7 20:12:16 | 显示全部楼层 |阅读模式
#include<STC8H.H>                //包含STC8H的头文件
#include"ai_usb.h"                //使用USB所需要的的头文件,这个头文件在使用AiCubde-ISP软件
                                                //添加型号和头文件到Keil中时就已经一并被添加到Keil中了。
                                               
void main(void)
{
        BYTE dat;                                        //定义变量保持接受的数据
       
        P_SW2 |= 0x80;                                //允许访问拓展的特殊寄存器,XFR
       
        //将所有的I/O口都初始化为准双向口工作程序的模式
        P0M0 = 0x00;P0M1 = 0x00;
        P1M0 = 0x00;P1M1 = 0x00;
        P2M0 = 0x00;P2M1 = 0x00;
        P3M0 = 0x00;P3M1 = 0x00;
        P4M0 = 0x00;P4M1 = 0x00;
        P5M0 = 0x00;P5M1 = 0x00;
        P6M0 = 0x00;P6M1 = 0x00;

       
        usb_init();                        //usb接口配置
        EA = 1;                                //打开总中断
        P40 = 0;                        //打开LED部分的供电
       
        while(1)
        {                                                        //使用USB串口控制来手动控制LED部分
                        if(bUsbOutReady)        //bUsbOutReady标志位是用于表明USB主机发送完成
                        {
                                dat = UsbOutBuffer[0];        //保存接收的数据
                                P6 = dat;                                //将接收的数据送到P6口显示
                                LED64_SetPort(6,dat);        //使用下载软件中的“调试仿真接口”中
                                                                                //“开天斧/屠龙刀_LED_DIP64(6)”进行模拟显示P6口
                                usb_OUT_done();                        //本包接收的数据处理完毕,准备接收下一数据包
                                        //当使用查询方式if(bUsbOutReady),查询调用USB库函数时,在数据处理完成后,
                                        //必须调用一次“usb_OUT_done();”,这样才能接收下一包数据
                        }
       
       
        }

}
这是完整的程序,报这个错误怎么解决


QQ截图20260707201117.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-07-07 20:12:16

1

主题

4

回帖

15

积分

新手上路

积分
15
发表于 2026-7-7 20:12:46 | 显示全部楼层
查了ai啥的,都解决不了,到底什么错误这个,初学者希望大家多多指点下

点评

你的kile激活了么,错误信息里面写着你的keil是试用版本  详情 回复 发表于 2026-7-7 20:37
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:747
  • 最近打卡:2026-07-22 07:47:21
已绑定手机
已实名认证

139

主题

3695

回帖

9515

积分

超级版主

积分
9515
发表于 2026-7-7 20:37:50 | 显示全部楼层
momo _*** 发表于 2026-7-7 20:12
查了ai啥的,都解决不了,到底什么错误这个,初学者希望大家多多指点下

你的kile激活了么,错误信息里面写着你的keil是试用版本
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-07-07 20:12:16

1

主题

4

回帖

15

积分

新手上路

积分
15
发表于 2026-7-7 21:00:26 | 显示全部楼层
这个应该是激活了吧
截图202607072100156780.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-07-07 20:12:16

1

主题

4

回帖

15

积分

新手上路

积分
15
发表于 2026-7-7 21:01:27 | 显示全部楼层
王*** 发表于 2026-7-7 20:37
你的kile激活了么,错误信息里面写着你的keil是试用版本

你看下我下面的图片,应该是激活了吧
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 2026-7-7 21:25:44 | 显示全部楼层
截图202607072125419270.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 2026-7-7 21:26:03 | 显示全部楼层

好的,我已经完整查看了帖子内容。现在结合图片中的编译错误信息,为你做详细分析。


错误分析:Keil C51 报错 *** FATAL ERROR L218: NOT AN OBJECT FILE

一、错误现象

从你提供的编译输出截图可以看到:

BL51 BANKED LINKER/LOCATER V6.22.4.0 - SN: Eval Version
...
*** FATAL ERROR L218: NOT AN OBJECT FILE
FILE: ..\stc_usb_cdc_8h_data.LIB
Target not created.

链接器报错:..\stc_usb_cdc_8h_data.LIB 不是对象文件,导致链接失败。

二、根本原因分析

这个错误有 两个可能的原因,需要逐一排查:


🔴 原因一(最可能):Keil C51 是评估版(Eval Version),代码大小受限

从编译输出中可以看到关键信息:

BL51 BANKED LINKER/LOCATER V6.22.4.0 - SN: Eval Version

Eval Version 表示你的 Keil C51 是评估版(未激活/未注册)。评估版有以下限制:

  • 编译生成的代码大小限制在 2KB 以内
  • 当链接的库文件(.LIB)或目标代码总大小超过 2KB 时,链接器会拒绝链接,并报出各种异常错误

L218: NOT AN OBJECT FILE 就是评估版限制的典型表现之一——链接器在评估模式下无法正确解析库文件格式,直接将其判定为"非对象文件"。

虽然你在帖子中说"应该是激活了吧",但从编译输出来看,链接器明确显示为 Eval Version,说明 Keil 并未成功激活。


🔴 原因二:库文件路径或文件本身损坏

如果 Keil 已激活但仍报此错,则可能是:

  1. 库文件路径不正确 — 链接器找不到 ..\stc_usb_cdc_8h_data.LIB 文件
  2. 库文件损坏 — 文件不是有效的 LIB 格式
  3. 库文件版本不匹配 — 库文件是用不同版本的 Keil 编译的

三、解决方案

✅ 方案1:激活 Keil C51(推荐)

步骤:

  1. 以管理员身份运行 Keil uVision
  2. 点击菜单 FileLicense Management
  3. License Management 窗口中查看当前状态
  4. 如果显示为 Eval Version,说明未激活,需要输入正版 License ID 码(LIC)
  5. 输入正确的 LIC 后点击 Add LIC 完成激活
  6. 激活成功后,重新编译项目

注意:Keil C51 的评估版限制是 2KB 代码,而 STC 的 USB 库(stc_usb_cdc_8h_data.LIB)本身就有数 KB,加上用户代码,必然超出限制,所以链接器报错。

✅ 方案2:确认库文件路径正确

检查项目设置中的库文件路径:

  1. 在 Keil 中右键点击 Target 1Options for Target 'Target 1'
  2. 切换到 Linker 标签页
  3. 查看 Misc ControlsLibrary 中指定的库文件路径
  4. 确保 ..\stc_usb_cdc_8h_data.LIB 文件确实存在于项目上级目录中

✅ 方案3:重新添加 STC 库文件

如果库文件损坏,可以重新操作:

  1. 打开 AiCube-ISP 下载软件(或 STC-ISP)
  2. 点击 "Keil仿真设置""添加型号和头文件到Keil"
  3. 重新添加 STC8H 系列的支持文件
  4. 这会重新生成正确的库文件到 Keil 的 C51\LIB 目录

✅ 方案4:不使用库文件,改用源码方式

如果暂时无法激活 Keil,可以改用 USB 的源码方式(不依赖 .LIB 文件):

  • 从 STC 官方例程中复制 stc_usb_cdc_8h_data.c 源码文件直接加入项目编译
  • 这样就不需要链接 .LIB 库文件了

四、总结

排查项 判断方法 解决
Keil 是否激活 看编译输出是否有 Eval Version 激活 Keil C51
库文件是否存在 检查 ..\ 目录下是否有该文件 重新添加 STC 库
库文件是否损坏 尝试用其他项目链接同一库 重新安装 STC 库支持

最可能的结论:你的 Keil C51 是 评估版(未激活),代码大小超过 2KB 限制,导致链接器无法正确解析库文件,报 L218 错误。激活 Keil C51 后即可解决。


🔍 搜索 "https://www.stcaimcu.com/thread-24786-1-1.html 帮分析"

📌 相关论坛讨论

  1. 请大家帮我分析烙铁运放电路
  2. 大伙帮我分析我对 Ai8051 实验箱温度获取的原理理解存在的问题。
  3. 在用8H4K64TL,按键唤醒掉电模式会偶尔碰到自行复位两次的问题,请求社友帮分析

⏱️ 查找用时 3.6s | 总回答用时 15.7s

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 2026-7-7 21:26:54 | 显示全部楼层
要先 和谐下
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-07-07 20:12:16

1

主题

4

回帖

15

积分

新手上路

积分
15
发表于 2026-7-7 21:52:20 | 显示全部楼层
已经解决了   
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:804
  • 最近打卡:2026-07-22 00:57:34
已绑定手机

51

主题

2780

回帖

2885

积分

荣誉版主

积分
2885
发表于 2026-7-7 22:14:21 | 显示全部楼层
应该还是注册问题
~~~
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-7-22 10:41 , Processed in 0.087487 second(s), 95 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表