test.cとkernel.asmはsrcフォルダーにあり、 MakefileはDebugフォルダーにあります。
src
test.c
kernel.asm
Debug
Makefile
これらのファイルはすべて非常に単純なコードです。しかしmake
、フォルダー内で実行Debug
すると、次のエラーが発生します。
ld -Ttext 0x30400 -o test ../Debug/kernel.o ../Debug/test.o
../Debug/test.o: In function `Print_String':
test.c:(.text+0xf): undefined reference to `printf'
誰かが理由を教えてもらえますか? 内容は次のとおりです。
test.c
#include <stdio.h>
int m = 1;
void Print_String()
{
printf("TEST");
}
カーネル.asm
extern m
extern Print_String
[section .text]
global _start
_start:
mov eax, m
call Print_String
メイクファイル
# This Program
TARGET = test
# All Phony Targets
.PHONY : everything clean all
DIR = ..
OBJ = $(DIR)/Debug/kernel.o $(DIR)/Debug/test.o
C_FILE = $(DIR)/src/test.c
K_ASM = $(DIR)/src/kernel.asm
ASM = nasm
LD = ld
CC = gcc
CC_FLAG = -c -g
ASM_FLAG = -f elf
LD_FLAG = -Ttext 0x30400
# Default starting position
everything : $(TARGET)
clean :
rm -f $(TARGET)
all : clean everything
kernel.o : $(K_ASM)
$(ASM) $(ASM_FLAG) -o $@ $<
test : $(OBJ)
$(LD) $(LD_FLAG) -o $@ $(OBJ)
test.o : $(C_FILE)
$(CC) $(CC_FLAG) -o $@ $<