64비트 아치를 대상으로 할 때 프로그램을 크로스 컴파일해야 합니까? 호스트는 x86 시리즈의 32비트 아치입니까?

64비트 아치를 대상으로 할 때 프로그램을 크로스 컴파일해야 합니까? 호스트는 x86 시리즈의 32비트 아치입니까?

내 호스트는
: x86 32비트 프로세서
내 목표는: x86 64비트 프로세서

질문이 몇 개 있습니다:

  • 사용 가능한 gcc를 사용하여 호스트에서 프로그램을 간단히 컴파일하고 대상에서 실행할 수 있는지 궁금합니다.
  • x86 64비트 프로세서용으로 크로스 컴파일해야 합니까? 그렇다면 컴파일 타임에 어떻게 지정합니까?
  • 프로그램을 크로스 컴파일하려면 별도의 툴체인을 사용해야 합니까?

답변1

모든 amd64(즉, 64비트 x64) 프로세서는 32비트 x86 바이너리를 실행할 수 있습니다. 또한 대부분의 운영 체제에서는 amd64 운영 체제에서 x86 프로그램을 실행할 수 있습니다. 따라서 x86 바이너리는 일반적으로 amd64 프로세서에 배포될 수 있습니다.

당신이 그렇게 할 의향이 있는지 여부는 또 다른 문제입니다. 64비트 운영 체제에는 일반적으로 제한된 32비트 라이브러리 세트가 함께 제공되므로 프로그램이 특이한 라이브러리를 사용하는 경우 64비트 실행 파일을 설치하는 것이 더 쉽습니다. 애플리케이션에 따라 32비트 또는 64비트 바이너리에 대한 성능 이점이 있을 수도 있고 없을 수도 있습니다.

64비트 실행 파일을 배포하기로 결정한 경우 x86 아키텍처에서 실행되는 amd64(즉, x86_64) 아키텍처용 크로스 컴파일 환경이 필요합니다. 이는 링크할 컴파일러와 정적 라이브러리를 의미합니다.

gcc 설치는 프런트엔드를 공유하고 여러 백엔드를 포함할 수 있습니다. 그러나 x86 플랫폼에서 amd64 개발 도구와 함께 제공되는 배포판은 많지 않으므로 아마도 자신만의 도구가 있어야 할 것입니다(gcc를 사용한 크로스 컴파일은 상당히 쉽습니다). 링크할 라이브러리에도 마찬가지입니다(물론 컴파일러가 있으면 소스에서 다시 컴파일할 수 있습니다).

예를 들어, x86의 Ubuntu 10.04에는 gcc 및 amd64 백엔드의 "multilib" 버전은 물론 작은 64비트 개발 패키지 세트(libc6-dev-amd64 libc6-dev-amd64 http://bit.ly/software-small 설치및 종속성 및 종속 패키지).

답변2

예, 가능합니다. 올바른 컴파일러 옵션을 지정하기만 하면 됩니다. 32비트 호스트에서는 결과 바이너리를 실행할 수 없습니다.

다음이 필요하다고 생각합니다: CFLAGS=-m64 또한 LD_LIBRARY_PATH 및 64비트 헤더와 라이브러리를 종속성과 유사하게 설정해야 합니다.

stackoverflow에 질문이 있습니다더 많은 답변이 있습니다.

관련 정보