Właśnie wypróbowałem najnowsze wersje llvm i clang trunk. Skompilowano je bez pojedynczego ostrzeżenia po wyjęciu z pudełka, ale mam problem z połączeniem przykładu Witaj świecie. Mój kod jestProblem łącznika klinowego
#include <stdio.h>
int main(){
printf("hello\n");
}
Jeśli mogę skompilować za pomocą
clang test.c
pojawia się następujący błąd
/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)
Korzystanie -v pokazuje, że ld gnu jest wywoływana jako
"/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
Ale mam plik obiektów crt1.o!
$ locate crt1.o
/usr/lib/Mcrt1.o
/usr/lib/Scrt1.o
/usr/lib/crt1.o
/usr/lib/gcrt1.o
Co działa również jest
clang -c test.c
gcc test.o
i oczywiście
gcc test.c
Co dalej próbowałem:
$ 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
Próbowałem również skopiowanie pliku do crt1.o bieżący katalog. To wydawało się działać. Cóż, nie skompilował, ponieważ po tym crti.o zaginął.
Moja dystrybucja to Ubuntu.
Cóż, nie wiem, jak spróbować. Nie widzę, jak mógłbym naprawić klang, ani nie mam pomysłu na wstrzyknięcie wymaganej ścieżki w inwokacji ld. Jakieś pomysły?
Mam tylko krótki opis -Xlinker w stronę mojego dzyń, ale nie jest -Xlinker miało być przeszedł dwa razy dla opcji z argumentami? Oto, co mówią strony man gcc dla -Xlinker. – anddam