C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL” 及extern的运用剖析

Keil C51混合编程中?C_STARTUP链接警告解决方案 在嵌入式开发中,C语言与汇编混合编程是提升性能的常见技术手段。Keil C51工具链在编译链接阶段可能遇到UNRESOLVED EXTERNAL SYMBOL警告,特别是缺失?C_STARTUP符号时,会导致运行时环境初始化失败。这涉及编译器工作原理、库文件依赖管理以及内存模型配置等核心技术点。通过分析启动代码机制和链接流程,开发者可以掌握如何正确添加C51S.LIB等运行时库,确保全局变量初始化和堆栈设置正确。该技术广泛应用于8051单片机开发中,特别是需要精细控制硬件或优化关键代码段的场景。解决此类库依 阅读详情
AI摘要

本文详细解析了C51编译时遇到的“未解决外部符号”警告及其原因,包括未添加C文件到项目及未正确声明或定义全局变量等问题,并提供了具体的解决方案。

 

C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL”

 *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL

    SYMBOL:  ?C_START

    MODULE:  .STARTUP.obj (?C_STARTUP)

 *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

    SYMBOL:  ?C_START

    MODULE:  .STARTUP.obj (?C_STARTUP)

    ADDRESS: 000DH

         如果你在用C51编译器出现上面的警告,并且找遍了网上也没能找出个究竟时,你是否觉得这个问题很难,难得以至于没人能回答呢?

        其实这个只是初学者和粗心者才会犯的错误:没把C文件添加到项目中!

///另外,还有可能是因为存在没有被调用的已经定义的函数。

 

源文档 <http://blog.163.com/paulucy@126/blog/static/94930282200911240504985/>

 

 


c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下。

    对于比较小的程序,一般只有一个c文件和一个头文件,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在头文件中定义有以下两种方法:用extern来声明:extern int i;这一句只是对变量i进行声明,在c文件的程序之前必须加上int i进行定义。extern int i=0;这一句声明和定义都做了。

    对于大一点的程序,有很多c文件和头文件,这个时候全局变量就必须在头文件中声明,然后在一个c文件中定义。如果在头文件中定义,则编译的时候会出现重复定义的错误。如果只有头文件中声明就会出现没有定义有警告。

   *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS

       SYMBOL:  K

       MODULE:  222.obj (222)

  出现上述错误则是因为变量k重复定义,把你的头文件中的变量定义前加extern,再在某一个c文件的程序之前再定义一下就可以了。

    *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL

    SYMBOL:  K

    MODULE:  111.obj (111)

*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

    SYMBOL:  K

    MODULE:  111.obj (111)

    ADDRESS: 000DH

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL

    SYMBOL:  K

    MODULE:  222.obj (222)

*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

    SYMBOL:  K

    MODULE:  222.obj (222)

    ADDRESS: 001FH

   这四个警告就是变量k在头文件中有声明,但是没有定义,只需在某一个c文件的程序之前定义一下即可。

 

源文档 <http://www.cublog.cn/u1/47082/showart_375642.html>

 

蓝桥杯 — 编译过程中遇到的问题 遇到的警告: Build target '目标 1' assembling STARTUP.A51... linking...*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C_START MODULE: STARTUP.obj (?C_STARTUP)*** WARNING L2: REFERENCE MADE TO ... 阅读详情

相关推荐

5分钟搞定JY901S与STM32通信:硬件I2C+DMA配置全流程(附OLED显示教程)

本文详细介绍了如何通过STM32硬件I2C接口配合DMA高效读取JY901S姿态传感器数据,并实现OLED实时显示。文章从硬件连接、I2C与DMA配置、通信协议解析到数据可视化,提供了完整的实战流程和避坑指南,帮助开发者快速构建高精度、低CPU占用的姿态感知系统。

weixin_29185167的博客 482

KEIL4 警告:L1 L2 L16

在Keil C中,如果没有显式调用到定义过的函数,就会出现这样的的警告。当出现这样的警告时,可以不用管,因为不影响其它部分。但是,我们知道,即使没有调用这个函数,Keil仍然把它编译连接进整个程序,不过浪费点ROM倒是不心疼。最主要的是,在这个函数中的变量,不会被列入覆盖分析范围内,也就是说这些变量占的空间不能被回收.另外,还有可能是因为存在没有被调用的已经定义的函数,或者相关的已经定义的变量没有使用。当这个不被调用的函数写在C文件中时,可以把它注释掉来解决这个问题。

LXB11123567的博客 8265

osgearth2.10 demo功能介绍

osgearth-2.10 demo: 说明: 1、运行环境win7 x64 旗舰版,CPU i5-6400 8核,8G内存; 2、括号内是对应demo的测试参数(.earth); 3、配置OSG_FILE_PATH; 4、参数命令行可以查看各个demo需要的输入参数; 5、前缀说明:gui界面程序、cmd控制台程序、non功能未知; 6、程序后括号里的non表示不需要通过命令行输入参数; 示例: 1、gui:osgearth_3pv(simple.earth):相机与地球的投影关系,Range表示相机

rach09的专栏 2422

用keil编写的 C51错误 *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C_START

可能原因: 替换工程的文件未先 remove该文件。 正常替换文件步骤: 1. 右键 欲 替换的文件,remove XXXXX.c from build ---->remove XXXXX.c from project 2. 右键 Source Files ----> Add file to group Source Files...

weixin_30952535的博客 5962

四旋翼滑模控制:从理论到Simulink实现

本文深入探讨了四旋翼滑模控制的理论与Simulink实现,对比了其相较于PID控制在抗干扰和鲁棒性方面的显著优势。文章详细介绍了从精确动力学建模、内外环滑模控制器设计到指令解算的完整流程,并分享了Simulink仿真搭建、参数调试及抗扰性能验证的实战经验,帮助工程师掌握在复杂环境下提升四旋翼稳定性的进阶技能。

weixin_29163581的博客 375

科研党必备:Zotero+Deepseek 打造AI文献阅读助手(附详细插件配置指南)

本文详细介绍了如何利用Zotero和Deepseek打造AI文献阅读助手,提升科研效率。从Zotero基础安装到中文文献处理插件茉莉花的配置,再到Deepseek API的集成与模型选择策略,全面覆盖了AI辅助阅读的关键环节。特别适合需要高效管理海量文献的科研工作者,显著提升文献筛选和分析速度。

backprop5master的博客 424

C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL” 及extern

C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL”  *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL     SYMBOL:  ?C_START     MODULE:  .STARTUP.obj (?C_STARTUP)  *** WARNING L2: REFERENCE MADE

opshres169的博客 3万+

2021-10-29 atcoder ABC157——B - Bingo

B - Bingo 先标记,然后暴力判断,这样最清晰最好想。 #include<iostream> #include<algorithm> #include<cstring> using namespace std; typedef long long LL; int a[110][110],b[110]; int main() { for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) cin>>a[i]

honeistbutter的博客 338

C语言-C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL” 及extern

C51编译警告“--- WARNING L1: UNRESOLVED EXTERNAL SYMBOL” ----WARNING L1:UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C_START MODULE: .STARTUP.obj (?C_STARTUP) ----WARNING L2:REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: ?C_START MODULE: .STA...

sinat_26528193的专栏 1万+

物联网通信中NB-IoT、Cat.1、LTE-M该如何选择?

首先我们要确定我们产品的关键需求,例如:我们的设备是否对数据传输速率有较高的要求,有较高要求我们就需要选择较高传输速率的Cat.1来开发我们的产品。同时关于产品性能方面,我们对功耗、延迟、可靠性也会有所要求,例如我们的产品为移动端产品,不方便布线以及安装电源,那我们就会采用电池供电的方式,所以在选择时可以优先考虑低功耗产品,最终结合其他需求选择出合适的协议。首先,我们需求的产品是不同的,我们需要根据产品需求或项目需求来进行选择,NB-IoT、Cat.1、Cat.M都有属于自己的优势。

a1809032425的博客 1216

2026AI漫剧放心大胆做!小白也能轻松出片(附保姆级教程)

要是在2025,我大概率会劝他再等等,毕竟那时工具还没这么顺手。但到了2026年的今天,我的回答得很干脆:放心去做,绝对没问题。这一年多来,AI漫剧这块的变化真可谓翻天覆地。过去你想拍个像样的短片,哪怕再简陋,也得凑齐拍摄设备、找场地、找演员,后期剪辑更是折磨。但现在,时代变了,AI已经把创作的门槛踏平了。你不需要请演员,也不用操心灯光布景,更不用为剪辑特效烧钱。一个人,一台电脑,花几天时间就能做一部完整的AI漫剧。你只要有有想表达的故事,突发的灵感,剩下的,都能直接交给AI落地。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 513

*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL”  *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL     SYMBOL:  ?C_START     MODULE:  .STARTUP.obj (?C_STARTUP)  *** WARNING L2: REFERENCE MADE

opshres169的博客 5万+

时间序列预测 | 决策树时间序列预测建模,单步、多步(Python)

时间序列预测 | 决策树时间序列预测建模,单步、多步(Python)

天天酷科研的博客 745

C头文件中使用extern定义全局变量

关于C语言中extern关键词的使用 最近在头文件中使用extern定义全局变量时,出现如下报错: keil51: *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: SETPLACE MODULE: common.obj (COMMON) VC: main.obj : error LNK2001: unresolve...

qq_45237293的博客 6346

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

keil WARNING L1 : UNRESOLVED EXTERNAL SYMBOL 和 WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

keil编译出现如下警告: WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: UART0 MODULE: .\obj\app_uart0.obj (APP_UART0) WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: UART0 MODULE: .\obj\app_uart0.obj (APP_UART0) ADDRESS: 31ACH 解决办法:L1和L2是同...

fenhong91的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C51编程总结-单片机的奇怪知识2(Keil 编译器报错)

Keil奇怪的报错

qq_34343637的博客 4263

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

WARNING L1 UNRESOLVED EXTERNAL SYMBOL

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ADC_VAL MODULE: .\main.obj (MAIN) ADC_VAL该参数未定义。

TrueLink的博客 3567

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL Build target 'Target 1'assembling STARTUP.A51...linking...*** WARNING L1: UNRESOLVED EXTER...

diyin9896的博客 1426

keil编译时出现*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL解决:包含该函数或变量的文件未添加到工程

weixin_33825683的博客 2万+

KEIL编程中常见的警告

@##KEIL编程中常见的警告 1、*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS 这句话直译就是“未调用段,忽略覆盖过程”,意思就是说代码中有一个函数,你定义了,却没有调用,图示代码里没有被调用的函数名字即第二行显示的LCD_DAT; 消除方法:调用那个函数或者注释掉那个函数就可以了 2、*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL 这句警告直译为“无法解析的外部符号”,意思就是有包含该

weixin_46628425的博客 1万+

REFERENCE MADE TO UNRESOLVED EXTERNAL.

REFERENCE MADE TO UNRESOLVED EXTERNAL. 原因 使用了一个未定义的外部变量.(经常是在当前文件中声明了 extern xxx , 但其实在其它的文件中没有定义这个变量)

niepangu的专栏 1万+

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: UBMOTOR_CTRL MODULE: .\BinObj\CAM.obj

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: UBMOTOR_CTRL MODULE: .\BinObj\CAM.obj (CAM) *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: UBMOTOR_CTRL MODULE: .\BinObj\CAM.obj (CAM) ADDRESS: C598H, 这个错误有几个可能,我是第三个 原因一:CAM.obj ? 是不是建工

weixin_43823834的博客 1282

C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL”以及相关的问题

C51编译警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL”以及相关的问题 今天编译程序的时候出现了以下问题: 然后参考了好几个博主的解决方案,编译后还是出现同样警告。后来发现原来是自己忘了添加相应的.c文件了。(很无语。。。) 记录一下自己遇到的问题。 ...

weixin_54524451的博客 1135
上一篇: interrupt 和 using 在C51中断中的使用
下一篇: 芯片(一)--74HC595中文资料
liufei_learning
博客等级 码龄17年 821粉丝 145原创
评论 20
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值