Я только что опробовал последние версии llvm и clang trunk. Они скомпилированы без единого предупреждения из коробки, но у меня возникли проблемы с привязкой к приветствующему миру примеру. Мой кодпроблема с линком clang
#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 показывает, что гну л.д. вызывается как
"/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. Есть идеи?
У меня есть только краткое описание -Xlinker на странице моего звоном, но не -Xlinker должен быть дважды передается для опций с аргументами? Это то, что говорится в man-страницах gcc для -Xlinker. – anddam