lldを使ってリンクをしようとすると「undefined symbol: _Unwind_Resume」というエラーが出る


コンパイル済みのc++のオブジェクトファイルをlldを使ってリンクしようとすると、次のようなエラーが出ます

[code]

    ld.lld: error: undefined symbol: _Unwind_Resume
    >>> referenced by main.cpp
    >>>               objs/main.o:(KernelMain)
    
[/code]

makefileは次のようになっています（make kernel.elfでコンパイル&リンク）

[code]

    CC = gcc
    CFLAGS =  -Wall -Wextra
    CFLAGS += -nostdlib
    OBJS = objs/main.o objs/entry.o objs/graphics.o objs/console.o
    
    objs/%.o: %.asm
        nasm -f elf64 -o $@ $<
    
    objs/%.o: %.c
        $(CC) $(CFLAGS) -I includes -c -o $@ $<
    
    objs/%.o: %.cpp
        clang++ -I includes -c $< -o $@
    
    kernel.elf: $(OBJS)
        ld.lld -L/lib/x86_64-linux-gnu/ -lstdc++ --entry KernelEntry -z norelro --image-base 0x100000 --static -o $@ $+
    
[/code]

ソフトウェアのバージョンは以下のような感じです

[code]

    gcc 9.3.0
    nasm 2.14.02
    clang++ 7.0.1-12
    lld 7.0.1
    
[/code]

調べてみたところgccのバージョンがコンパイル時とリンク時で違うことによって起こる問題（？）とのような情報を得られたのですが、c++のコンパイルにはclang++を使っており、リンカもlldを使っているのでどのように変更すればいいのかわかりません。

どのようにすればエラーなしに正常にリンク作業を行えるかご教授お願い致します。




`_Unwind_Resume`というシンボルは例外処理関連のもので、専用のライブラリ（`libgcc_s`など）が実装しています。`-nostdlib`をつけるとそういったライブラリがリンクされなくなるので、シンボルが解決できずエラーが発生します。質問のMakefileでは`clang++`に`-nostdlib`が渡されていないので、そうはならないはずなのですが…。

Makefileの`ld.lld`を実行するところに追加で`-lgcc_s`を渡してみるとうまくいくかもしれません。

参考：[Exception Handling in LLVM](https://llvm.org/docs/ExceptionHandling.html),
[Ubuntu で clang + libc++
を使う](https://qiita.com/kojiohta/items/fb6c307365d1db388acc)




`_Unwind_Resume`というシンボルは例外処理関連のもので、専用のライブラリ（`libgcc_s`など）が実装しています。`-nostdlib`をつけるとそういったライブラリがリンクされなくなるので、シンボルが解決できずエラーが発生します。質問のMakefileでは`clang++`に`-nostdlib`が渡されていないので、そうはならないはずなのですが…。

Makefileの`ld.lld`を実行するところに追加で`-lgcc_s`を渡してみるとうまくいくかもしれません。

参考：[Exception Handling in LLVM](https://llvm.org/docs/ExceptionHandling.html),
[Ubuntu で clang + libc++
を使う](https://qiita.com/kojiohta/items/fb6c307365d1db388acc)

