链接步骤无法找到符号(XC8编译)(Link step can't find symbols

2019-10-18 01:45发布

我试图编译和链接使用XC8编译的C程序。 我从C18编译器改变,做了一些小的兼容性修改代码。 随着C18,代码编译和链接就好了。 随着XC8,编译去罚款,但链接步骤失败,此错误:

Error [500] ; 0. undefined symbols:
_putch(server.obj) _ENC_Init(server.obj) _ENC_WriteRegister(server.obj) _ENC_ReadRegister(server.obj)

由于编译成功,我想找到原型,ERGO的.h文件包括没关系。 我猜编译器无法找到.c文件。

该功能putch不是在我自己的程序中调用,但它叫putchar和我使用的功能。 首先是功能ENC_是我自己的功能。

我添加了两个路径到XC8工具包的“包含搜索路径”:

  • C:\Program Files (x86)\Microchip\xc8\v1.12\sources ,编译器的程序.c文件的位置,我相信
  • C:\...\lib ,那里有我自己.c文件的位置。

不过,我仍然得到错误。

我怎样才能解决这个问题呢?

这是一个完整的日志:

Advisory[1233] Employing 18F4620 errata work-arounds:
Advisory[1234]  * Corrupted fast interrupt shadow registers
Advisory[1234]  * Data in RAM location can be corrupted if async. reset occurs during write
Warning [1273] ; . Omniscient Code Generation not available in Free mode
cgpic18 "--edf=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\en_msgs.txt" --cmode=htc -Og9s -q -E1 -w9 -PMS0:code:0@CODE=00h-0FFFFh -PMS0:code:0@CONST=00h-0FFFFh -PMS0:code:0@SMALLCONST=01000h-010FFhx240 -PMS0:code:0@MEDIUMCONST=01000h-0FFFFh -PMS1:data:8@COMRAM=01h-07Fh -PMS1:data:0@ABS1=00h-0F7Fh -PMS1:data:0@BIGRAM=01h-0F7Fh -PMS1:data:0@RAM=080h-0FFh,0100h-01FFhx14,0F00h-0F7Fh -PMS1:data:400@BANK0=080h-0FFh -PMS1:data:800@BANK1=0100h-01FFh -PMS1:data:1000@BANK2=0200h-02FFh -PMS1:data:2000@BANK3=0300h-03FFh -PMS1:data:0@BANK4=0400h-04FFh -PMS1:data:0@BANK5=0500h-05FFh -PMS1:data:0@BANK6=0600h-06FFh -PMS1:data:0@BANK7=0700h-07FFh -PMS1:data:0@BANK8=0800h-08FFh -PMS1:data:0@BANK9=0900h-09FFh -PMS1:data:0@BANK10=0A00h-0AFFh -PMS1:data:0@BANK11=0B00h-0BFFh -PMS1:data:0@BANK12=0C00h-0CFFh -PMS1:data:0@BANK13=0D00h-0DFFh -PMS1:data:0@BANK14=0E00h-0EFFh -PMS1:data:0@BANK15=0F00h-0F7Fh -PMS1:data:0@SFR=0F80h-0FFFh -PMS3:config:0@CONFIG=0300000h-030000Dh -PMS2:eedata:0@EEDATA=0F00000h-0F003FFh -PMS4:idloc:0@IDLOC=0200000h-0200007h "--cfgdata=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\cfgdata\18f4620.cfgdata" --cfgprefix=__CFG_ -MLFSROK -MIEEE_DBL -MIEEE_FLT -PPIC18F4620,1,65535,3967,8194,31,1,0,127,0 -fp -AC:\Users\...\AppData\Local\Temp\s234. --funcdat=C:\Users\...\AppData\Local\Temp\s234.5 --addrqual=ignore --runtime=init --runtime=clear server.p1 "C:\Program Files (x86)\Microchip\xc8\v1.12\lib\pic18-plib-htc-18f4620.lpp" "C:\Program Files (x86)\Microchip\xc8\v1.12\lib\pic18-stdlib-htc-d32-f32.lpp"
cgpic18 "--edf=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\en_msgs.txt" --cmode=htc -q -E1 -Dserver.sdb -PMS0:code:0@CODE=00h-0FFFFh -PMS0:code:0@CONST=00h-0FFFFh -PMS0:code:0@SMALLCONST=01000h-010FFhx240 -PMS0:code:0@MEDIUMCONST=01000h-0FFFFh -PMS1:data:8@COMRAM=01h-07Fh -PMS1:data:0@ABS1=00h-0F7Fh -PMS1:data:0@BIGRAM=01h-0F7Fh -PMS1:data:0@RAM=080h-0FFh,0100h-01FFhx14,0F00h-0F7Fh -PMS1:data:400@BANK0=080h-0FFh -PMS1:data:800@BANK1=0100h-01FFh -PMS1:data:1000@BANK2=0200h-02FFh -PMS1:data:2000@BANK3=0300h-03FFh -PMS1:data:0@BANK4=0400h-04FFh -PMS1:data:0@BANK5=0500h-05FFh -PMS1:data:0@BANK6=0600h-06FFh -PMS1:data:0@BANK7=0700h-07FFh -PMS1:data:0@BANK8=0800h-08FFh -PMS1:data:0@BANK9=0900h-09FFh -PMS1:data:0@BANK10=0A00h-0AFFh -PMS1:data:0@BANK11=0B00h-0BFFh -PMS1:data:0@BANK12=0C00h-0CFFh -PMS1:data:0@BANK13=0D00h-0DFFh -PMS1:data:0@BANK14=0E00h-0EFFh -PMS1:data:0@BANK15=0F00h-0F7Fh -PMS1:data:0@SFR=0F80h-0FFFh -PMS3:config:0@CONFIG=0300000h-030000Dh -PMS2:eedata:0@EEDATA=0F00000h-0F003FFh -PMS4:idloc:0@IDLOC=0200000h-0200007h "--cfgdata=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\cfgdata\18f4620.cfgdata" --cfgprefix=__CFG_ -MLFSROK -MIEEE_DBL -MIEEE_FLT -PPIC18F4620,1,65535,3967,8194,31,1,0,127,0 -AC:\Users\...\AppData\Local\Temp\s234. --funcdat=C:\Users\...\AppData\Local\Temp\s234.5 --addrqual=ignore --runtime=init --runtime=clear server.p1 "C:\Program Files (x86)\Microchip\xc8\v1.12\lib\pic18-plib-htc-18f4620.lpp" "C:\Program Files (x86)\Microchip\xc8\v1.12\lib\pic18-stdlib-htc-d32-f32.lpp"
aspic18 "--edf=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\en_msgs.txt" --cmode=htc -E1 "-CC:\Program Files (x86)\Microchip\xc8\v1.12\dat\picc-18.ini" -ver=V1.12 -lserver.lst --opt= -n -18F4620 --comdiv=127 -no_pa -oserver.obj C:\Users\...\AppData\Local\Temp\s234.
aspic18 "--edf=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\en_msgs.txt" --cmode=htc -E1 "-CC:\Program Files (x86)\Microchip\xc8\v1.12\dat\picc-18.ini" -ver=V1.12 --opt= -n -18F4620 --comdiv=127 -no_pa -oC:\Users\...\AppData\Local\Temp\s234.obj C:\Users\...\AppData\Local\Temp\s234.as
hlink "--edf=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\en_msgs.txt" -cs -h+server.sym -z -w9 -Q18F4620 -Mserver.map -E1 -ver=XC8#PRO##V1.12 -ACODE=00h-0FFFFh -ACONST=00h-0FFFFh -ASMALLCONST=01000h-010FFhx240 -AMEDIUMCONST=01000h-0FFFFh -ACOMRAM=01h-07Fh -AABS1=00h-0F7Fh -ABIGRAM=01h-0F7Fh -ARAM=080h-0FFh,0100h-01FFhx14,0F00h-0F7Fh -ABANK0=080h-0FFh -ABANK1=0100h-01FFh -ABANK2=0200h-02FFh -ABANK3=0300h-03FFh -ABANK4=0400h-04FFh -ABANK5=0500h-05FFh -ABANK6=0600h-06FFh -ABANK7=0700h-07FFh -ABANK8=0800h-08FFh -ABANK9=0900h-09FFh -ABANK10=0A00h-0AFFh -ABANK11=0B00h-0BFFh -ABANK12=0C00h-0CFFh -ABANK13=0D00h-0DFFh -ABANK14=0E00h-0EFFh -ABANK15=0F00h-0F7Fh -ASFR=0F80h-0FFFh -preset_vec=00h,intcode,intcodelo,powerup,init,end_init -pramtop=01000h -psmallconst=SMALLCONST -pmediumconst=MEDIUMCONST -pconst=CONST -AFARRAM=00h-00h -ACONFIG=0300000h-030000Dh -pconfig=CONFIG -AIDLOC=0200000h-0200007h -pidloc=IDLOC -AEEDATA=0F00000h-0F003FFh -peeprom_data=EEDATA -prdata=COMRAM,nvrram=COMRError   [500] ; 0. undefined symbols:
_putch(server.obj) _ENC_Init(server.obj) _ENC_WriteRegister(server.obj) _ENC_ReadRegister(server.obj) 
AM,nvbit=COMRAM,rbss=COMRAM,rbit=COMRAM -pfarbss=FARRAM,fardata=FARRAM -pintsave_regs=BIGRAM,bigbss=BIGRAM,bigdata=BIGRAM -pbss=RAM -pidata=CODE,irdata=CODE,ibigdata=CODE,ifardata=CODE C:\Users\...\AppData\Local\Temp\s234.obj server.obj
del l.obj
del C:\Users\...\AppData\Local\Temp\s234.
del C:\Users\...\AppData\Local\Temp\s234.1
del C:\Users\...\AppData\Local\Temp\s234.2
del C:\Users\...\AppData\Local\Temp\s234.3
del C:\Users\...\AppData\Local\Temp\s234.4
del C:\Users\...\AppData\Local\Temp\s234.5
del C:\Users\...\AppData\Local\Temp\s234.as
del C:\Users\...\AppData\Local\Temp\s234.obj
(908) exit status = 1

Answer 1:

看着这里后 ,和咨询Microchp XC8 用户手册,事实证明至少有一个问题是,您的源缺乏putch()函数。 许多程序(如printf()中的Microchip库,例如)依靠的存在putch()为他们的操作功能,而这个功能必须由您提供。 而在“常规”电脑这样的功能,预计将打印字符到stdout ,微控制器缺乏标准输出,因此putch()在一个意义上的“定义”你的“标准”输出是什么是靠它。 所述putch()函数是应该输出的单个字符的一些输出诸如LCD,串行,闪烁的LED? (在摩尔斯电码也许?),或载体鸽子 。 从手动,350页:

printf()功能是一个格式化的输出例行程序,在stdout操作。 它依赖于putch()函数来确定标准输出的目的地。 该putch()函数必须写,因为每个项目的一部分,以及代码以初始化该程序所使用的任何外围设备。 一种存根putch可以在编译器的源目录中找到。

编写putch()函数,甚至是一个什么也不做,将解决至少问题_putch被未定义:看来_putch (在错误的函数的名称)只是AA 名称错位 putch()



文章来源: Link step can't find symbols (XC8 compiler)