Makefile未定义对库的引用

时间:2017-03-01 17:34:04

标签: c makefile

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

我正在编写一个操作系统,我也在编写自己的c标准库版本,纯粹是一般兴趣类型的东西。我有一个我的c标准库,它目前只包含一个不完整的string.h,位于内核主目录的sb_libc文件夹中。如果它包含我的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

0 个答案:

没有答案