문제

모든 것을 읽었다는 것을 의미하는 것 같 건축 크로스 컴파일러는 크게 보다 더 열심히 구축하는 컴파일러를 대상으로 플랫폼에서 실행.이것이 진리입니까?그렇다면 이유는 무엇입니까?그것은 것처럼 어셈블리 코드를 생성하고 시스템 통화에 대한 임의의 플랫폼 수 없보다 더 열심히 생성하는 그러한 코드고 시스템 통화 플랫폼에 대한 컴파일러에서 실행되지만,어쩌면 내 자연스러운 모습을 보여주고 순진하기도 합니다.

도움이 되었습니까?

해결책

"건축 크로스 컴파일러는 크게 보다 더 열심히 구축하는 컴파일러를 대상으로 하는 응용 프로그램이 실행되는 플랫폼입니다."

문제가 존재 방식 때문에 라이브러리 구축하고 있습니다.

일반적인 상황이 모든 라이브러리가 있는 특정 장소에서 사용되고 있는 모든 응용 프로그램에 의해에는 시스템입니다.모든 메커니즘을 구축하고 소프트웨어에서의 위치는 라이브러리입니다.인 파일을 컴파일러 등에 따라 달라는 아이디어 갈 수 있습니다 그들은 특정 지점을 찾아 그들이 필요한 것이 무엇인가.

에서 크로스 컴파일하는 경우,그러나,크로스 컴파일러,파일 등 만들 수 없다 이러한 가정을 경우 그들은 그들은 링크에 잘못된 라이브러리입니다.

그래서 그것은 정말 온라는 사실을 개발자들은 특정 가정 초기에,그리고 우리가 붙어있습니다.

그것을 어렵게 얻을 때 당신이 건축 루트 파일 시스템 때문에,유닉스에만 알고에 대해 하나의 루트 파일 시스템입니다.를 작성할 때 다른 루트 파일 시스템을 만들 수 있는 특별할 수 있는 환경을 조작하고 그에 영향을 미치지 않고 실시 루트 파일 시스템으로 넘어갑니다.

-Adam

다른 팁

이것은 더 어려울 필요는 없지만 컴파일러 아키텍처에 따라있을 수 있습니다.

컴파일러는 소스 코드를 ASM 및 시스템 호출로 변환하는 것이 아닙니다. 또한 기존의 통합을 통합하고 있습니다 도우미 코드 생성 된 파일에. 여기에는 스타트 업 코드, 기능 서문, C API의 일부가 포함 된 C API 등이 포함되어 있습니다.

플랫폼 A 플랫폼 A의 일반 컴파일러 C1에서 원래 컴파일러 C0은 C1과 그 ITS를 구축 할 수 있습니다. 도우미 코드 (C0이 a) 직접.

플랫폼 A에 구축 된 플랫폼 B의 크로스 컴파일러 C2에서 원래 컴파일러 C0은 먼저 필요하지 않은 C2의 특수 버전을 구축해야합니다. 도우미 코드 (때문에 도우미 코드 C0은 A를 대상으로하는 반면 A)는 C2를 실행하여 도우미 코드. 컴파일러에 따라 C2의 두 번째 버전을 생성해야 할 수도 있습니다. 도우미 코드.

C2의 제한된 버전을 구축하는 행위없이 도우미 코드 부트 스트래핑입니다.

많은 크로스 컴파일러에는 여러 대상이 있습니다. 일반적으로 멀티 타겟 컴파일러는 단일 대상 컴파일러보다 훨씬 어렵고 모든 멀티 타겟 컴파일러는 정의에 따라 크로스 컴파일러라고 생각합니다. 따라서 많은 크로스 컴파일러는 비 크로스 컴파일러보다 훨씬 더 복잡합니다.

플랫폼 A에 컴파일러를 작성하는 플랫폼 B에 대해서만 코드를 컴파일하는 것은 원칙적으로 플랫폼 A에만 컴파일되는 플랫폼 A에 컴파일러를 작성하는 것보다 어렵지 않아야합니다.

크로스 컴파일러를 구축하는 것은 당신이 크로스 컴파일을 원할 수도있는 경우에만 어렵습니다. 어셈블러, 링커 및 디버거도 마찬가지입니다. 대상 기계에 대해 알고있는 것을 나타내는 명시 적 추상화를 만들어야하는 것만으로도해야합니다.

잘 설계된 잘 문서화 된 크로스 컴파일러의 예를 보려면 확인하십시오. LCC. 크로스 데 버거의 디자인에 대해 읽으려면 회의 논문 그리고 a 박사 학위 논문. 코드를 다운로드 할 수 있습니다. 잘 모르겠습니다.

GCC 교차 컴파일로 작업 한 문제는 다음과 같습니다.

  • 연결하려면 호스트 시스템 (즉, sysroot)에있는 대상 시스템의 일부 시스템 파일이 있어야합니다.

  • 일부 언어는 런타임이 아닌 컴파일 타임에 평가해야합니다. 또한 일부 최적화로 인해 컴파일 타임에 사물을 평가하여 (최적화되지 않은 경우) 런타임에 평가됩니다. 대상에 호스트 시스템에 존재하지 않는 수치 유형이있는 경우 컴파일 타임 및 런타임 케이스에서 동일한 답변을 얻는 것이 까다로울 수 있습니다.

  • 테스트는 조금 더 성가신 일 수 있습니다. 두 개의 시스템이 있어야하며 프로그램을 서로 전송하는 방법이 있어야합니다.

그러나 실제로, 그것은 내가 겪는 일반적인 문제에 관한 것입니다.

'건물'이 '쓰기'대신 '컴파일'을 의미하는 '크로스 컴파일러로 GCC를 구축하는 것과 같은 특정 사례를보고있을 수 있습니까?

라이브러리 주변의 문제로 인해 어려울 수 있습니다. 크로스 컴파일러의 경우 대상 플랫폼 용 라이브러리가 필요합니다. '기본'(IE 비 크로스) 컴파일러의 경우 이미 대상 라이브러리가 있습니다.

나는 '코드 생성기 만들기'측면이 동일하거나 적어도 컴파일러가 실행되는 곳보다 대상 프로세서의 아키텍처에 더 많은 영향을받는 것에 대해 당신과 함께 있습니다.

그리고 크로스 컴파일러가 많은 분명한 상황이 있습니다. 더 쉬운 비 크로스보다. 8051 호스팅 된 C ++ 컴파일러는 타겟팅 한 플랫폼이든 단단한 작업 일 것이라고 생각합니다.

다음 질문에 대한이 답변은 이것이 어려운 이유를 이해하는 데 도움이 될 수 있습니다.

요즘 크로스 플랫폼을 만들 수없는 이유는 무엇입니까?

나는 모든 것이 다른 방식으로 네이티 IO를 호출하는 다른 운영 체제로 귀결된다고 생각합니다. 플랫폼 독립적 인 컴파일러를 구축하려면 모든 Nitty가 어떻게 작동하는지 정확히 알아야하고 기본적으로 OS를 구축해야합니다.

지금 일을 떠나야하므로 집에 도착하면 업데이트하겠습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top