最新のllvmおよびclangトランクバージョンを試しました。彼らはすぐに警告なしでコンパイルしましたが、Hello World の例をリンクするのに問題があります。私のコードは
#include <stdio.h>
int main(){
printf("hello\n");
}
を使用してコンパイルすると
clang test.c
次のエラーが表示されます
/usr/bin/ld: crt1.o: No such file: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
-v を使用すると、gnu ld が次のように呼び出されることが示されます。
"/usr/bin/ld" --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o a.out crt1.o crti.o crtbegin.o -L -L/../../.. /tmp/cc-0XJTsG.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed crtend.o crtn.o
しかし、crt1.o オブジェクト ファイルがあります。
$ locate crt1.o
/usr/lib/Mcrt1.o
/usr/lib/Scrt1.o
/usr/lib/crt1.o
/usr/lib/gcrt1.o
また機能するのは
clang -c test.c
gcc test.o
そしてもちろん
gcc test.c
私がさらに試したこと:
$ clang -Xlinker "-L /usr/lib" test.c
/usr/bin/ld: crt1.o: No such file: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$ clang -Xlinker "-L /usr/lib" test.c -v
"/usr/bin/ld" --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o a.out crt1.o crti.o crtbegin.o -L -L/../../.. -L /usr/lib /tmp/cc-YsI9ES.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed crtend.o
また、crt1.o ファイルを現在のディレクトリにコピーしようとしました。それはうまくいったようです。その後、crti.o が欠落していたため、コンパイルできませんでした。
私のディストリビューションはUbuntuです。
さて、私は次に何を試すべきか本当にわかりません。clang を修正する方法がわかりませんし、ld の呼び出しに必要なパスを挿入する方法もわかりません。何か案は?