4
test.c的和kernel.asm在文件夾中SRC,生成文件是文件夾調試中,只是像這樣:未定義參考`的printf」
src
test.c
kernel.asm
Debug
Makefile
所有這些文件都是非常簡單的代碼。但是,如果我的文件夾Debug
在運行make
,我會收到以下錯誤:
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");
}
kernel.asm
extern m
extern Print_String
[section .text]
global _start
_start:
mov eax, m
call Print_String
的Makefile
# 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 [email protected] $<
test : $(OBJ)
$(LD) $(LD_FLAG) -o [email protected] $(OBJ)
test.o : $(C_FILE)
$(CC) $(CC_FLAG) -o [email protected] $<
將'-lc'添加到ld命令行可能會有所幫助。 – 2013-02-12 14:42:08
除非你有自己的printf版本,否則你必須鏈接到C運行庫('-lc')。 – 2013-02-12 14:42:40
除「-lc」,「-I/lib/ld-linux.so.2」外,您可能還需要另一個ld標誌。 ld,默認情況下,查找「... so.1」,這會給出一個令人困惑的「文件未找到」錯誤! – 2013-02-12 23:30:06