gpt4 book ai didi

c - 链接器无法识别外部语句

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:19 34 4
gpt4 key购买 nike

我正在学习内核开发教程 osdever ,我正在打印到教程的屏幕部分。它编译得很好,没有错误或警告,但是当它链接时,我得到:

screen.o: In function `scroll':
screen.c:(.text+0x12c): undefined reference to `memcpy'
screen.o: In function `put_str':
screen.c:(.text+0x249): undefined reference to `strlen'

我在 screen.c 的顶部有一个 system.h 的 include 语句,在 system.h 中我有

#ifndef __SYSTEM_H
#define __SYSTEM_H

extern unsigned char *memcpy(unsigned char *dest, const unsigned char *src, int count);
extern unsigned char *memset(unsigned char *dest, unsigned char val, int count);
extern unsigned short *memsetw(unsigned short *dest, unsigned short val, int count);
extern int strlen(const char *str);
extern unsigned char inportb (unsigned short _port);
extern void outportb (unsigned short _port, unsigned char _data);
extern void clear();
extern void put_char(unsigned char c);
extern void put_str(unsigned char *str);
extern void set_color(unsigned char fcol, unsigned char bcol);
extern void init_video();

#endif

我在网上找不到任何相关信息,教程中也没有任何帮助。似乎当我更改链接器语句中的顺序时,从

/usr/local/cross/bin/i586-elf-ld -T link.ld -o kernel.bin start.o main.o screen.o

/usr/local/cross/bin/i586-elf-ld -T link.ld -o kernel.bin start.o screen.o main.o

我明白了

screen.o: In function `put_str':
screen.c:(.text+0x249): undefined reference to `strlen'
main.o: In function `main':
main.c:(.text+0x9b): undefined reference to `init_video'

编辑 http://pastebin.com/ibBAVpe5 - 主.c

最佳答案

您还没有提供 strlen,那么它应该从哪里来呢?在正常编译中,ld 命令行将由 cc 添加一个 -lc 以引入标准库。鉴于迹象表明这是独立的,您将需要提供自己的支持例程,例如 strlenmemcpy;您不能使用标准 C 库(或者必须非常小心),因为它会尝试为某些事情调用内核。

#

这并没有解释重新排序对象的其他问题,也没有解释下面评论中的讨论。这使我相信您有一个损坏的或可能不兼容的链接描述文件(-T link.ld)。粘贴那个?

关于c - 链接器无法识别外部语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6513970/

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