C 对库的Makefile未定义引用

C 对库的Makefile未定义引用,c,makefile,C,Makefile,我知道这是一个非常常见的问题,但无论我在哪里寻找,我都找不到有效的解决方案 我正在写一个操作系统,也在写我自己版本的c标准库,纯粹是作为一个普通的兴趣类型。我在内核主目录的sb_libc文件夹中有我的c标准库,它目前只包含一个不完整的string.h。如果内核包含我的string.h头,我不能使用make来实际生成内核。我不断得到“未定义的strcpy引用”。为了测试是否可以包含任何内容,我编写了另外两个文件io.c和io_asm.s,并将它们的*.o文件放入内核的主目录中。我可以很好地将它们与

我知道这是一个非常常见的问题,但无论我在哪里寻找,我都找不到有效的解决方案

我正在写一个操作系统,也在写我自己版本的c标准库,纯粹是作为一个普通的兴趣类型。我在内核主目录的sb_libc文件夹中有我的c标准库,它目前只包含一个不完整的string.h。如果内核包含我的string.h头,我不能使用make来实际生成内核。我不断得到“未定义的strcpy引用”。为了测试是否可以包含任何内容,我编写了另外两个文件io.c和io_asm.s,并将它们的*.o文件放入内核的主目录中。我可以很好地将它们与内核链接起来。显然,我的make文件中的库搜索路径是错误的。我会把它贴在下面。如果有人能告诉我我做错了什么,那就太好了

OBJECTS = loader.o io.o io_asm.o kmain.o ./sb_libc/string.o
CC = gcc
CFLAGS =  -e kmain -m32 -nostdlib -nostdinc -fno-builtin -fno-stack-protector -nostartfiles -nodefaultlibs -Wall -Wextra -Werror -c -I./sb_libc/ -L./sb_libc/
LDFLAGS =  -T link.ld -melf_i386 -I./sb_libc/ -L./sb_libc/
AS = nasm
ASFLAGS = -f elf

all: kernel.elf

kernel.elf: $(OBJECTS)
    ld $(LDFLAGS) $(OBJECTS) -o kernel.elf

os.iso: kernel.elf
    cp kernel.elf iso/boot/kernel.elf
    genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -A os -input-charset utf8 -quiet -boot-info-table -o os.iso iso

run: os.iso
    bochs -f bochsrc.txt -q

%.o: %.c
    $(CC) $(CFLAGS)  $< -o $@

%.o: %.s
    $(AS) $(ASFLAGS) $< -o $@

clean:
    rm -rf *.o kernel.elf os.iso
OBJECTS=loader.o io.o io_asm.o kmain.o./sb_libc/string.o
CC=gcc
CFLAGS=-e kmain-m32-nostdlib-nostdinc-fno内置-fno堆栈保护器-nostartfiles-nodefaultlibs-Wall-Wextra-Werror-c-I./sbu libc/-L./sbu libc/
LDFLAGS=-T link.ld-melf_i386-I./sb_libc/-L./sb_libc/
AS=nasm
ASFLAGS=-f elf
全部:kernel.elf
kernel.elf:$(对象)
ld$(LDFLAGS)$(对象)-o kernel.elf
os.iso:kernel.elf
cp kernel.elf iso/boot/kernel.elf
genisoimage-R-b boot/grub/stage2_eltorito-无emul引导-引导负载大小4-A os-输入字符集utf8-安静-引导信息表-o os.iso
运行:os.iso
bochs-f bochsrc.txt-q
%.o:%.c
$(CC)$(CFLAGS)$<-o$@
%.o:%.s
$(AS)$(ASFLAGS)$<-o$@
清洁:
rm-rf*.o kernel.elf os.iso

Do
io.c
io\u asm.s
使用
strcpy
?如果您还没有编写strcpy,那么是什么让您认为您的路径有问题?strcpy是我试图链接的内容。我写了string.h并试图让它工作。它位于sb_libc文件夹中。您需要实现自己的
strcpy
,因为您没有使用标准c库是的,我知道。strcpy是我编写的函数,现在我正在尝试将其链接。它位于文件夹./sb_libc中,该文件夹位于内核目录中。该函数是在string.c中实现的,我编写了string.c并尝试将其链接进来,但它不起作用。您看到什么
ld
命令使其执行?如果在命令行上调用
ld
,会发生什么?你必须简化这个问题。