2017-10-30 3 views
-1

많은 충돌 정보가 표시되며 설명이 필요합니다. 빌드, 호스트대상크로스 컴파일 용어 --- 빌드, 호스트 및 대상

빌드가 알고있는 세 가지 시스템 이름이 있습니다 : 당신은 (빌드)이 (호스트)에 대한 구축 기계를에 구축되어있는 기계, GCC가 코드를 생성 할 기계 (대상). GCC를 구성 할 때 --build =, --host = 및 --target =과 함께 지정합니다.

사실, 이해가 안 무엇 호스트 및 위의 정의에 대상의 차이.

다른 어떤 페이지는

'호스트'코드를 컴파일하는 데 사용하는 기계 (또는 아키텍처, 또는 플랫폼) 말한다; 'target'은 코드를 실행하기위한 기계 (또는 아키텍처 또는 플랫폼)입니다.

이 나에게 의미가 있지만,이 설명에서 호스트 항상 빌드과 동일하다 ?? 나는 꽤 혼란 스럽다.

필자의 경우 컴파일러 (GCC)가 x86_64 컴퓨터에서 실행되고 이진 실행 파일이 ARM에서 실행되도록 구성하고 있습니다. 이 프로그램은 C로 작성되었으므로 컴파일러는 GCC입니다.

./configure --build=x86_64 --host=x86_64 --target=arm-linux-gnueabihf 
    make 
    make install 

이 빌드와 같은 호스트가 모두 x86_64에 있으며 대상은 팔입니다 소리. 그 맞습니까?

젠킨스 컴퓨터 (x86_64)에서 실행되는 내 자신의 임베디드 프로그램을 컴파일하고 있습니다. 그리고 임베디드 프로그램은 ARM 기반 컴퓨터에서 실행됩니다.

+0

정확히 어떤 프로그램을 컴파일하고 있습니까? 일부 크로스 컴파일러 버전의 [GCC] (http://gcc.gnu.org/) 또는 이미 사용 가능한'gcc '바이너리가있는 자신의 프로그램? 몇 가지 [MCVE]를 보여주고 (질문에 약간의 출처를 보여 줌) 사용하고있는 정확한 * 컴파일 명령을 보여줍니다 (그리고 그들이 실행중인 컴퓨터에 대해 설명하십시오). 시스템 (호스트, 빌드 머신, 대상 머신)에 대해 알려주십시오. ** 개선을 위해 질문을 ** 수정하십시오. 현재 혼란 스럽습니다. –

+0

편집을해도 질문이 명확하지 않습니다. "컴파일러를 구성하는 것"은 무엇을 의미합니까?* 구성 및 구성 방법 * * ** 귀하의 질문을 더욱 향상 시키십시오 **. 정확한 명령을 입력하십시오. 실행중인 컴퓨터에 대해 설명하십시오. ** 어떤 컴파일러를 사용합니까? ** * 및 * ** 어떻게 사용합니까? ** –

+0

분명히 영어는 모국어가 아닙니다. 따라서 어휘를 향상시키고 (어쩌면 일부 사전을 사용하여), 사용중인 정확한 명령 *을 제공하십시오. IMHO 문장은 "컴파일러가 x86_64 시스템에서 실행되고 이진 실행 파일이 ARM에서 실행되도록 구성하고 있습니다."는 의미가 없습니다 (구성 방법과 방법을 알려주지 않음). 영어가 쉽지 않다는 것을 감안할 때 질문에 정보와 중복을 추가해야합니다. –

답변

1

PowerPC 컴퓨터에서 ARM에서 실행되는 바이너리를 만드는 x86 컴퓨터에서 사용할 (실행) 컴파일러를 만드는 경우를 가정 해 보겠습니다.

이렇게하면 PPC가 빌드되고 x86은 호스트가되며 타겟은 ARM이됩니다. Basile이 언급했듯이, 이것은 Canadian-cross입니다.

빌드와 호스트가 다르지만 확실히 발생합니다. 때로는 빌드와 호스트가 같은 아키텍처 일 수도 있지만이를 유발하는 환경에 대해서는 다른 점이 있습니다. 내 x86에 커스텀 툴체인을 만드는 것은 빌드와 호스트가 x86이라는 것을 의미 할 것이다. 그러나 호스트는 빌드와는 다른 라이브러리 나 의존성을 가질 수있다. 예를 들어, 빌드 서버에서 실행되는 임베디드 개발 용 샌드 박스 도구 체인을 빌드하는 경우입니다.

+1

그런 상황을 Canadian-cross 컴파일러라고합니다. 나는 이유를 모른다. –

+0

@BasileStarynkevitch 나는 더욱 혼란 스럽다. 나는 컴파일러를 만들지 않을 것이다. 나는 Makefile을 사용하여 ARM에서 실행되는 바이너리를 생성한다. makefile은 x86_64 시스템에서 실행되지만 이진 실행 파일은 ARM 시스템에서 실행해야합니다. – sh0731

+0

@SteveHe : 당신은 GCC를 설정하고 있으므로 컴파일러를 빌드하고있다. (gcc의 일부 바이너리). 그렇지 않으면 질문이 의미가 없습니다. –