Mam wirtualny system Debian, którego używam do tworzenia.
Dzisiaj chciałem spróbować llvm / clang.
Po zainstalowaniu clang nie mogę skompilować moich starych projektów c (z gcc). To jest błąd:
...
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status
...
Odinstalowałem clang i nadal nie działało.
Czy ktoś ma pomysł, jak mogę to naprawić?
libc0.1-dev
.Odpowiedzi:
Debian / Ubuntu
Problem polega na tym, że prawdopodobnie masz tylko gcc dla swojej obecnej architektury i jest to 64-bitowe. Potrzebujesz 32-bitowych plików pomocniczych. W tym celu musisz je zainstalować
źródło
sudo apt-get install gcc-multilib
i naprawiło mój błąd zgfortran -m32 ...
Pomogło mi utworzenie dowiązania symbolicznego:
źródło
Wygląda na to, że podczas gry z llvm / clang (lub menedżer pakietów) usunąłeś wcześniej istniejący standardowy pakiet deweloperski biblioteki C ( eglibc na Debianie) lub może nie miałeś go zainstalowanego w pierwszej kolejności, więc musisz przeinstalować it, teraz, gdy wróciłeś do gcc.
Możesz to zrobić w ten sposób na Debianie:
Ubuntu:
W systemie Ubuntu, jeśli nie masz libc-dev, ponieważ nie mogę go znaleźć na packages.ubuntu.com, możesz spróbować bezpośrednio zainstalować libc6-dev.
Lub w systemach typu Redhat:
NB: Chociaż w komentarzach udzielono Ci krótkiej odpowiedzi, oto odpowiedź, więc jest jedna zapisana na wypadek, gdyby ktoś ją spotkał i mógł szukać odpowiedzi, ale nie w komentarzach lub komentarz nie jest dla niego wystarczająco wyraźny .
źródło
apk add libc-dev=0.7.1-r0
To jest BŁĄD zgłoszony w starterze, ale istnieje obejście:
Uruchom to, aby zobaczyć, gdzie znajdują się te pliki
następnie dodaj tę ścieżkę do zmiennej LIBRARY_PATH
źródło
Jeśli używasz wersji testowej Debiana, zwanej „wheezy”, być może ugryzło Cię przejście na multiarchę. Więcej na temat multiarch Debiana tutaj: http://wiki.debian.org/Multiarch
Zasadniczo dzieje się tak, że różne biblioteki specyficzne dla architektury są przenoszone z tradycyjnych miejsc w systemie plików do miejsc specyficznych dla nowej architektury. Dlatego
/usr/bin/ld
jest zdezorientowany.Znajdziesz crt1.o w obu
/usr/lib64/
i/usr/lib/i386-linux-gnu/
teraz i będziesz musiał powiedzieć o tym swojemu toolchainowi. Oto dokumentacja, jak to zrobić; http://wiki.debian.org/Multiarch/LibraryPathOverviewZauważ, że samo utworzenie dowiązania symbolicznego da ci tylko jedną architekturę i zasadniczo wyłączysz multiarchę. Chociaż może to być to, czego chcesz, może to nie być optymalne rozwiązanie.
źródło
Po przeczytaniu http://wiki.debian.org/Multiarch/LibraryPathOverview opublikowanego przez jeremiaha znalazłem flagę gcc, która działa bez linku symbolicznego:
Więc możesz po prostu dodać
-B/usr/lib/x86_64-linux-gnu
do zmiennej CFLAGS w swoim Makefile.źródło
Aby uzyskać 64-bitową wersję RHEL 7 do kompilacji 32-bitowych programów gcc 4.8, musisz zrobić dwie rzeczy.
Upewnij się, że wszystkie 32-bitowe narzędzia programistyczne gcc 4.8 są całkowicie zainstalowane:
Kompiluj programy przy użyciu opcji -m32
skradzione stąd: Jak skompilować 32-bitowe aplikacje na 64-bitowym RHEL? - Musiałem zrobić tylko krok 1.
źródło
Jak wyjaśniono w brakującym pliku crti.o , lepiej jest użyć polecenia „gcc -print-search-dirs”, aby znaleźć całą ścieżkę wyszukiwania. Następnie utwórz łącze, jak wyjaśniono powyżej "sudo ln -s", aby wskazać lokalizację crt1.o
źródło
To działało dla mnie z Ubuntu 16.04
źródło
./configure --disable-multilib
działa na to
źródło
Wpadłem na to w CentOs 5.4. Zauważyłem, że lib64 zawierało pliki crt * .o, ale lib nie zawierało. Zainstalowałem glibc-devel przez yum, który zainstalował bity i386 i to rozwiązało mój problem.
źródło
Nawet dostałem ten sam błąd kompilacji, kiedy kompilowałem krzyżowo i686-cm-linux-gcc.
Poniższa opcja kompilacji rozwiązała mój problem
Uwaga: sysroot powinien wskazywać katalog kompilatora, w którym dostępne są usr / include
W moim przypadku toolchain jest zainstalowany w katalogu / opt / toolchain / i686-cm-linux-gcc, a usr / include jest również dostępny w tym samym katalogu
źródło
Rozwiązałem to w następujący sposób:
1) spróbuj zlokalizować pliki ctr1.o i ctri.o przy użyciu
find -name ctr1.o
W moim komputerze mam następujące informacje:
$/usr/lib/i386-linux/gnu
2) Dodaj tę ścieżkę do
PATH
(równieżLIBRARY_PATH
) zmiennej środowiskowej (aby zobaczyć, jaka jest nazwa: wpiszenv
polecenie w terminalu):źródło
Miałem dzisiaj ten sam problem, rozwiązałem go instalując zalecane pakiety: libc6-dev-mipsel-cross libc6-dev-mipsel-cross, libc-dev-mipsel-cross
To zadziałało:
źródło
W moim przypadku błąd crti.o był spowodowany konfiguracją ścieżki wykonania z Matlaba. Na przykład nie można wykonać pliku, jeśli wcześniej nie ustawiono ścieżki katalogu wykonywania. Aby to zrobić: Plik> setPath, dodaj swój katalog i zapisz.
źródło
posługiwać się
gcc -B lib_path_containing_crt?.o
źródło
W moim przypadku w ogóle
Ubuntu 16.04
nie mamcrti.o
:Więc instaluję pakiet deweloperski libc 6 -dev:
źródło