当我尝试静态链接libc ++ abi.a时,出现“尝试动态对象`/usr/lib/x86_64-linux-gnu/libc++abi.a'的静态链接”错误。

时间:2020-07-03 08:10:47

标签: c++ ubuntu makefile g++ ld

环境

  • ubuntu 18.04(由vagrant创建的虚拟环境)
  • gcc5.5.0

我正在尝试构建自己的小操作系统。 我正在用C ++ / NASM编写内核。

我将编译构成内核的几个C ++文件中的每一个,然后将它们链接在一起以创建一个可执行文件。 (这是因为我自己的内核的入口点不是“ main”,所以我不敢在编译时同时链接)

错误

每个C ++文件的编译将毫无问题地运行,并且将创建每个目标文件。 但是,在链接目标文件时出现以下错误。

但是我知道“ .a”文件是静态对象,而不是动态对象,因此我无法理解为什么会收到此错误。

如果您能告诉我,我将不胜感激。

ld: attempted static link of dynamic object `/usr/lib/x86_64-linux-gnu/libc++abi.a'

这是日志的全文

mkdir -p ./obj
g++ -O2 -g -MMD -Wall -I./include -o obj/hoge.o -c src/hoge.cpp
mkdir -p ./obj
g++ -O2 -g -MMD -Wall -I./include -o obj/huga.o -c src/huga.cpp
mkdir -p ./obj
g++ -O2 -g -MMD -Wall -I./include -o obj/piyo.o -c src/piyo.cpp
mkdir -p ./obj
nasm -f elf64 -o obj/assm.o src/assm.asm
ld --entry <ENTRY_POINT> --static -o ./ELF/kernel.elf ./obj/hoge.o ./obj/huga.o ./obj/piyo.o ./obj/assm.o -lc -lc++ -lc++abi -L/usr/lib/x86_64-linux-gnu
ld: attempted static link of dynamic object `/usr/lib/x86_64-linux-gnu/libc++abi.a'
Makefile:12: recipe for target 'ELF/kernel.elf' failed
make: *** [ELF/kernel.elf] Error 1

Makefile

COMPILER  = g++
CFLAGS    = -O2 -g -MMD -Wall
INCLUDE   = -I./include
TARGET    = ./ELF/kernel.elf
SRCDIR    = ./src
SOURCES := $(shell find $(SRCDIR) -name *.cpp -or -name *.c -or -name *.asm)
OBJDIR    = ./obj
OBJECTS   = $(OBJDIR)/hoge.o $(OBJDIR)/huga.o $(OBJDIR)/piyo.o $(OBJDIR)/assm.o
DEPENDS   = $(OBJECTS:.o=.d)
LDFLAGS = --entry <ENTRY_POINT> --static
$(TARGET): $(OBJECTS)
    ld $(LDFLAGS) -o $(TARGET) $(OBJECTS) -lc -lc++ -lc++abi -L/usr/lib/x86_64-linux-gnu

$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
    -mkdir -p $(OBJDIR)
    $(COMPILER) $(CFLAGS) $(INCLUDE) -o $@ -c $<

$(OBJDIR)/%.o: $(SRCDIR)/%.asm
    -mkdir -p $(OBJDIR)
    nasm -f elf64 -o $@ $<

all: clean $(TARGET)

clean:
    rm -rf $(OBJECTS) $(DEPENDS) $(TARGET)

-include $(DEPENDS)

0 个答案:

没有答案
相关问题