簡體   English   中英

GCC鏈接器不鏈接標准庫

[英]GCC linker does not link standard library

我正在為我的學期項目開發一個基本內核。 到目前為止,我在項目中尚未使用任何標准庫,但我需要gets() ,其中包含了<stdio.h> GCC找到標頭位置,但鏈接器給出錯誤:

ld -melf_i386 -Tlink.ld  -o kernel boot.o main.o monitor.o common.o descriptor_tables.o isr.o interrupt.o gdt.o timer.o
main.o: In function `main':
main.c:(.text+0x53): undefined reference to `gets'

這是我的Makefile文件,

SOURCES=boot.o main.o monitor.o common.o descriptor_tables.o isr.o interrupt.o gdt.o timer.o

CFLAGS= -m32 -fno-stack-protector -fstack-check 
LDFLAGS= -melf_i386 -Tlink.ld
ASFLAGS=-felf

all: $(SOURCES) link

clean:
    -rm *.o kernel

link:
    ld $(LDFLAGS) -o kernel $(SOURCES)

.s.o:
    nasm $(ASFLAGS) $<

您不能將C庫用於內核,因為它是為現有內核構建的並且依賴於其目標OS的syscall。 相反,您必須編寫鍵盤驅動程序,以及從任何地方獲取字符所需的所有其他操作。 從這個角度來看, getc()是一個非常高級的函數,在編寫任何要與之交互的內容之前,您應該考慮使內核的基本功能穩定。

順便說一句,您應該真正構建一個交叉編譯器 與為系統編譯器提供笨拙的選項相比,它具有許多優點。 畢竟,內核是要在不同的機器上運行的,因此應針對裸x86進行編譯,這是交叉編譯器的工作。

繼續編碼這個東西! leitimmel

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM