gcc는 -m32와 연결되지 않습니다


23

64 비트 시스템 에서 가장 간단한 ( int main(){}) 프로그램 을 컴파일하려고 -m32하면 실패합니다.

$ gcc -m32 test.c
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status

-m32지정된 경우 여전히 잘못된 디렉토리에서 잘못 검색하는 것 같습니다 .

libgcc-4.8-dev:i386이 설치되어 있고 32 비트 라이브러리가에 있음을 확인했습니다 /usr/lib/gcc/i686-linux-gnu/4.8/.

내가 설정하고 수출을 시도했습니다 LD_INCLUDE_PATHLD_LIBRARY_PATH아무 소용에.


답변:


23

먼저 "gcc-multilib"와 "g ++-multilib"를 설치해야합니다

sudo apt-get install gcc-multilib g++-multilib

그런 다음 현재 명령이 작동합니다.

$ cat hello.c
#include <stdio.h>

int main(int argc, char *argv[]) {
    puts("Hello, World!");
}
$ uname -a
Linux vbox-1404 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ gcc -m32 hello.c
$ ./a.out
Hello, World!
$ file a.out
a.out: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=80bdc95e2941e3ba8d7bb7c1682098f20e77cebc, not stripped

2
참고 : C ++ 프로그램의 경우 g++-multilib에도 필요합니다.
Vladimir Panteleev 2016 년

1
또한 고려하십시오 : libc6-dev-i386.
kenorb 2016 년

0

x86_64 환경에서 C 코드를 x86 32 비트 실행 파일로 성공적으로 컴파일하려면 다음과 같은 추가 패키지를 설치해야합니다.

sudo apt-get install libc6-dev-i386 gcc-multilib

다음과 같은 컴파일 호출 후

$ gcc -m32 test.c -o test

성공합니다.


0

gcc버전이 버전과 일치하지 않는 경우에도이 문제가 발생합니다 gcc-multilib. 이 경우 올바른 버전의 multilib 패키지를 설치해야합니다. 예를 들어; gcc 버전 4.6을 사용 gcc-4.6-multilib하고 있었 g++-4.6-multilib으므로 기본 gcc-multilib패키지가 설치되었으므로 설치해야 했습니다 4.8.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.