[gcc] 컴파일 문제 : crt1.o를 찾을 수 없음

개발에 사용하는 가상 데비안 시스템이 있습니다.

오늘은 llvm / clang을 시도해보고 싶었습니다.

clang을 설치 한 후 이전 c- 프로젝트 (gcc 사용)를 컴파일 할 수 없습니다. 이것은 오류입니다.

...
/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
...

clang을 제거했지만 여전히 작동하지 않습니다.

누구든지 내가 이것을 고칠 수있는 방법을 알고 있습니까?



답변

Debian / Ubuntu

문제는 현재 아키텍처에 대한 gcc 만 있고 64 비트라는 것입니다. 32 비트 지원 파일이 필요합니다. 이를 위해 설치해야합니다.

sudo apt install gcc-multilib


답변

나에게 도움이 된 것은 심볼릭 링크를 만드는 것입니다.

sudo ln -s /usr/lib/x86_64-linux-gnu /usr/lib64


답변

llvm / clang을 사용하는 동안 (또는 패키지 관리자) 기존의 표준 C 라이브러리 개발 패키지 ( Debian의 eglibc )를 제거 했거나 처음에 설치하지 않았을 수 있으므로 다시 설치해야합니다. 이제 gcc로 되돌 렸습니다.

데비안에서 다음과 같이 할 수 있습니다.

aptitude show libc-dev

Ubuntu :

apt-get install libc-dev

Ubuntu에서 libc-dev가없는 경우 packages.ubuntu.com에서 찾을 수 없으므로 libc6-dev를 직접 설치할 수 있습니다.

또는 Redhat 같은 시스템에서 :

yum glibc-devel 설치

NB : 댓글에 간략하게 답변했지만, 여기에 답변이 있습니다. 누군가이 답변을 접하고 답변을 찾고있을 수 있지만 댓글에 없거나 댓글이 충분히 명시 적이 지 않은 경우를 대비하여 기록에 하나가 있습니다. .


답변

이것은 런치 패드에서보고 된 BUG 이지만 해결 방법이 있습니다.

이 파일이 어디에 있는지 확인하려면 이것을 실행하십시오.

$ find /usr/ -name crti*
/usr/lib/x86_64-linux-gnu/crti.o

그런 다음이 경로를 LIBRARY_PATH 변수에 추가하십시오.

$ export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH


답변

데비안의 테스팅 버전 인 ‘wheezy’를 사용하고 있다면 멀티 아치로의 이동에 물렸을 수도 있습니다. 데비안의 멀티 아키에 대한 더 자세한 정보는 여기 : http://wiki.debian.org/Multiarch

기본적으로 다양한 아키텍처 특정 라이브러리가 파일 시스템의 기존 위치에서 새로운 아키텍처 특정 위치로 이동되고 있습니다. 이것이 /usr/bin/ld혼란스러운 이유 입니다.

당신은 모두 crt1.o를 찾을 수 /usr/lib64//usr/lib/i386-linux-gnu/지금 당신은 그것에 대해 당신의 툴체인을 이야기해야합니다. 이를 수행하는 방법에 대한 몇 가지 문서가 있습니다. http://wiki.debian.org/Multiarch/LibraryPathOverview

단순히 심볼릭 링크를 생성하면 하나의 아키텍처 만 제공 되며 기본적으로 다중 아키텍처를 비활성화하게됩니다. 이것이 원하는 것일 수 있지만 최적의 솔루션이 아닐 수도 있습니다.


답변

jeremiah가 게시 한 http://wiki.debian.org/Multiarch/LibraryPathOverview 를 읽은 후 심볼릭 링크없이 작동하는 gcc 플래그를 찾았습니다.

gcc -B/usr/lib/x86_64-linux-gnu hello.c

따라서 -B/usr/lib/x86_64-linux-gnuMakefile의 CFLAGS 변수에 추가 할 수 있습니다 .


답변

RHEL 7 64 비트를 사용하여 gcc 4.8 32 비트 프로그램을 컴파일하려면 두 가지 작업을 수행해야합니다.

  1. 모든 32 비트 gcc 4.8 개발 도구가 완전히 설치되었는지 확인합니다.

    sudo yum install glibc-devel.i686 libgcc.i686 libstdc++-devel.i686 ncurses-devel.i686
  2. -m32 플래그를 사용하여 프로그램 컴파일

    gcc pgm.c -m32 -o pgm

도난당한 곳 : 64 비트 RHEL에서 32 비트 앱을 컴파일하는 방법은 무엇입니까? -1 단계 만하면됩니다.