This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在编译包含 emWin 图形库的项目时、出现以下错误:
第一个引用的未定义
文件中的符号
---------------- ----------------
Write_Data_ 16 ./emWin/Config/LCDConf.obj
Write_Index_Reg_ 16./emWin/Config/LCDConf.obj
这是唯一的错误、即使在"清理项目"之后仍然存在。 LCDConf.c 中的一行是"include "LCD_driver.h"。 在 lcd_driver.h 中,行是"extern void Write_Data_ 16( U16 Data );"。 在 LCD_driver.cc 中是函数:
空 Write_Data_ 16(U16数据){
LCD_Data (); //写入 Data_Sel 寄存器。
LcdWrite16(数据); //数据输出。
LCD_WR_True (); //将其选通。
for (int i=0;i<10;i++){}
LCD_WR_False ();
}
提供帮助。 谢谢
道格
lcd_driver.cc 是函数
它真的是一个 LCD_driver.cc 或 LCD_driver.c 文件吗? CCS 无法识别.cc。 假设它是 LCD_driver.c 文件、此文件在哪里? CCS 可以找到该文件吗?
尊敬的 Charles:
是的、它是 LCD_DRIVER.cc、而 CCS 确实识别了它(对我来说、识别它已接近15年了。 是的、CCS 可以发现此文件、因为所有内容都已编译且运行正常、直到我将 Write_Data_ 16 ()调用添加到 LCDConf.c 文件中。
谢谢、Doug
尊敬的 Doug:
我会将您的问题转发给我们的编译器专家、以征求您的意见。
我已将该问题转给了主题专家。
执行重建项目解决了问题。 谢谢你。
执行清理之后执行编译工程和执行重建工程之间的区别是什么?
道格
Doug、我们也认为先清理后再构建与全部重建是相同的。 我将保持打开该文件、直到该组件区域的所有者回来、以便我可以向他们提出相关问题。
我取回它、误差仍然存在。 我已经注释掉了图形库中的调用。 请重新打开问题。
我无法插入日志文件、它一直说无法插入。 我将文件放在根目录中、即使我输入文件:\\C:\BuildLog.txt、它也不会保存它。 为什么 INSERT 函数没有 Browse 按钮 I can't fathom。
谢谢、Doug
我不知道这是否有区别、但未解析的链接位于项目根目录下的文件中、图形库位于子目录中。
谢谢。
很遗憾、无法访问附加的 BuildLog.txt。 在我上一篇文章中、单词"attached"是指向 该 有关如何将文件附加到论坛帖子的常见问题解答条目的可点击链接。 请遵循该常见问题解答中的说明。
谢谢。此致、
-乔治
不幸的是、我无法看到我要找的内容。 链接器调用是...
"C:/TI/ccs1011/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/bin/armcl" -@"ccsLinker.opt" -o "emWinLibTest.out"
这意味着链接器调用会从文本文件中读取所有内容 ccsLinker.opt 。 这包括目标文件、库、选项等。 我想知道 LCD_driver.obj 链接器的输入之一。 如果不是、那么我们需要弄清楚这是怎么发生的。 请检查该文件、并告诉我。
谢谢。此致、
-乔治
是的、lcd_driver.obj 是链接器的输入、它包含第4个输入。 我将拖放 lcd_driver.obj.txt 供您查看。
接下来、查看中定义了哪些全局符号 LCD_driver.obj 。 在命令行中,请运行...
armnm -g lcd_driver.obj
阿尔姆纳姆 是名称实用程序。 它位于同一个 二进制 Directory 作为编译器 机箱 。 将该命令的输出复制到下一篇文章中。
谢谢。此致、
-乔治
它是:
PS C:\ti\ccs1011\ccs\tools\compiler\ti-cgt-arm_20.2.7.sts\bin>armnm -g LCD_driver.obj
00000000 w Lib$$request$armlib
00000000 w Lib$$Request$$cpplib
00000000 U _Z10LcdWrite16t
00000001 T _Z11LCD_CS_Truev
00000001 T _Z11LCD_WR_Truev
00000001 T Data_Selv
00000001 T Reset_Hiv
00000001 T Reset_Lov
00000001 T _Z12LCD_WR_Falsev
00000071 T _Z12 Write_Data_ 8h
000001cd T _Z13 Cold_Init_ L.CDv
00000001 T Index_Selv
00000001 T Sel_Hiv
00000001 T Sel_Lov
000000a3 T Write_Data_ 16t
000000d5 T _Z1616 Write_Reg_Data_ 8hh
00000001 T _Z17 Write_Index_Reg_ 8h
0000014b T _Z17 Write_Reg_Data_ 16tt
00000033 T _Z18 Write_Index_Reg_ 16t
00000000 U _Z7DelayMsi
00000001 T _Z9LCD_CS_Lov
00000001 T _Z9LCD_WR_HIV
00000001 T _Z9LCD_WR_Lov
00000000 U _Z9LcdWrite8h
00000000 D __TI_DW.debug_info.$base_types.c8c38483d660372cd06395436475430b
00000000 D __TI_DW.debug_info.GUI.h.3faca3c13440f4dc6c841893f54d893a
00000000 D __TI_DW.debug_info.GUI_Type.h.d8f96134368f765c80378b006e3d6695
00000000 D __TI_DW.debug_info.LCD.h.1f2eb5162e863cc275977590d3f425c6
00000000 D __TI_DW.debug_info._stdint.h.dae46d2680a0ef0318854371040bc9c6
00000000 D __TI_DW.debug_info._types.h.5571128f76cd416c2dd2fe1f700de5bf
00000000 D __TI_DW.debug_info._types.h.92b3a46de8d5a94b82a34dc94f40ee32
00000000 D __TI_DW.debug_info.common.h.362b3e5dee9c213bb9a8dbe7ee8e91b2
00000000 D __TI_DW.debug_info.lcd_driver.cc.40376d3757c7edfa307a589b7323741b
00000000 D __TI_DW.debug_info.stdint.h.9d38a5ba65e636e71337cc2a2817e095
00000000 U memcpy
PS C:\ccs1011\ccs\tools\compiler\ti-CGT-ARM_20.2.7.LTS\bin>
是否 LCD_驱动器.cc 包含 C 代码、还是 C++代码?
谢谢。此致、
-乔治
该文件 LCD_驱动器.cc 编译为 C++代码、而不是 C 代码。 这意味着函数的名称已改编。 例如函数...
_Z13 Write_Data_ 16t
这就是名称在汇编代码、映射文件等中的显示方式。 但您从 C 代码中调用它、 Write_Data_ 16 。 该名称下不存在函数。
解决方案是应用 外部"C" 函数名的名称。 不仅仅是在 LCD_驱动器.cc ,但也在头文件中。 文件中的头文件中、 #ifdef _cplusplus 因此在编译为 C 时不会看到该信息。 有关所有详细信息、请参阅 此常见问题解答 (并非来自 TI)。
我很抱歉没有尽快考虑这一点。 现在回顾线程、这个问题的证据非常明显。 「我知道了,妈妈。」
谢谢。此致、
-乔治
我很抱歉,我浪费了你的时间在我应该弄清楚自己的东西上。 这是我第一次遇到这个问题、不会再发生。
道格