2014-02-11 1 views
0

64 비트 시스템에서 이전 버전과 호환되도록 32 비트 시스템에서 컴파일하려면 어떻게해야합니까? Adobe, Dropbox 및 다른 회사가 그러한 바이너리를 가지고 있기 때문에이 작업을 수행 할 수 있습니다. 정적으로 링크하려면 어떻게해야합니까? 일부 라이브러리 및 기타 동적 정적 만?리눅스 x86 및 x64 모두에서 실행되는 간단한 프로그램 컴파일

int main() { 
    printf("Hello world!\n"); 
} 

감사합니다 : 나는 간단한 코드와 같은 대해서 이야기하고

!

+1

크로스 컴파일이라고합니다. configure 또는 cmake와 같은 도구를 사용하지 않는 한 약간의 엉망입니다. 또한 교차 컴파일을 위해 gcc를 설치해야합니다. –

+1

@Alexis 명령에 '-m32'를 추가하는 것을 부르지 않을 것입니다. 엄격한 의미로 말할지라도 교차 컴파일이라고 부르지는 않습니다. – rubenvb

+0

configure 스크립트를 보면 64 비트에서 -m32 (그리고 그 반대의 경우)에서 크로스 컴파일 설정을 호출합니다 ... 이제는 특별한 인터프리터없이 64 비트 플랫폼에서 32 비트 소프트웨어를 실행할 수 있으므로, 그것은 바보 같이 들린다. 다른 방법으로는 ... –

답변

2

일반적으로 두 버전을 모두 컴파일하거나 32 비트 버전 만 컴파일하고 사용자에게 32 비트 라이브러리가 설치되어 있어야합니다.

모든 명령에 -m32을 추가하여 GCC에 32 비트 용으로 컴파일하도록 알릴 수 있습니다. 이 작업을 수행하려면 multilib 컴파일러가 필요하며 필요한 lib32 * 파일이 설치되어 있어야합니다.

+0

32 비트 컴파일 된 프로그램이있는 64 비트 시스템에서이'./hello : No file or directory'를 얻으면 32 비트 라이브러리가 없기 때문입니다. – bsteo

+0

@xtmtrx 아니요. 실행 파일이 없거나 없거나 잘 실행 되었기 때문일 수 있습니다. 출력이'hello'라고 확인한 다음,'chmod + x hello'를하십시오. 컴파일러는 자동으로 이것을해야합니다. 또한'ldd hello'를 실행하여 모든 라이브러리를 찾을 수 있는지 확인하십시오. – rubenvb

+0

실행 가능합니다. '동적 인 실행 파일이 아닙니다'(정적 라이브러리로 컴파일되었지만 libc는 동적으로 남았습니다). 'hello : GNU/Linux 2.6.15, BuildID [sha1] = 0xdd94b04d4b8bca92e94f3e1ce13a97c180b30493, stripped'에 대해 ELF 32 비트 LSB 실행 파일, Intel 80386, 버전 1 (SYSV), 동적 링크 (공유 라이브러리 사용); '-rwxrw-rw-1 xtmtrx xtmtrx 22068 Feb 11 12:31 안녕하세요. – bsteo

3

일반적으로 그런 다음 64 비트 시스템에 32 비트 라이브러리를 설치하십시오.

관련 문제