gpt4 book ai didi

c - .o 文件中 undefined symbol

转载 作者:行者123 更新时间:2023-11-30 15:02:35 30 4
gpt4 key购买 nike

我正在使用 icc12 制作一个包含三个文件的项目:

.s 文件,包含一系列汇编语言子程序

包含函数列表的.h 文件

.c 程序包含我调用子例程的主代码

我的问题是,当我编译 C 程序时,编译器显示以下错误:

 !ERROR file 'filename.o': undefined symbol '_lcd_putstr'
!ERROR file 'filename.o': undefined symbol '_lcd_init'
!ERROR file 'filename.o': undefined symbol '_lcd_move'
!ERROR file 'filename.o': undefined symbol '_lcd_clear'

我一直在研究 .o 文件实际上是什么,我知道它是一个包含 CPU 可以理解的机器代码的目标文件。它们包含的信息允许链接器查看它需要哪些符号才能工作。我仍然不明白如何修复这些错误。我检查了是否有语法错误,但似乎找不到任何错误。有人能够提供一些帮助,帮助我如何在我的 .o 文件中“定义”这些符号吗?

我的构建命令是

 #include <stdio.h>
#include <mc9s12dp512.h>
#include "lcd.h"

int main (void)
{
unsigned char keycode;
int keysave = 0;

DDRB = 0x00; /* make Port B an input port */

lcd_init(); // initialise the lcd module
lcd_clear(); // clear the lcd module

// print the welcome message on the LCD module
lcd_putstr(" message A ");

// move the cursor position down a line
lcd_move(1,1);
lcd_putstr(" message B ");

// move the cursor position down a line
lcd_move(1,2);
lcd_putstr(" message C ");

// move the cursor position down a line
lcd_move(1,3);
lcd_putstr(" message D ");

摘自 _lcd_putstr 的汇编文件

 _lcd_putstr::
pshx
tfr d,x ; Transfer address of string to X
ldaa #WRDATA ; Set up command for write data
jsr WriteBytes ; Call subroutine to write byte to LCD
pulx
rts

最佳答案

通常,编译器在编译 c 源代码时会在标识符前添加下划线。如果您的编译器这样做,则必须将下划线添加到汇编程序文件中的子例程名称中,并在 .h 文件中省略它,例如:

汇编程序文件中的名称:_lcd_putstr

.h 文件中的原型(prototype):int lcd_putstr(void);

在.c文件中使用:n= lcd_putstr();

<小时/>编辑:

"when I compile my C program the compiler displays the following errors [...]"

您向我们显示的错误不是编译器错误。它们是链接器错误。 C 文件被编译成 .o 文件。所有必需的 .o 和 lib 文件都由链接器组合成可执行文件。正是在这个阶段,生成错误消息:链接器找不到这些符号。

您必须指示编译器生成 .o 文件。然后,您必须发出命令将对象链接到可执行文件中。您似乎没有或没有发出此命令。请参阅您的开发工具的文档,了解如何发出包含所有必需对象的链接命令。

关于c - .o 文件中 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40992446/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com