Ubuntu 12.04 i386 호스트에서 Ubuntu 12.04 armhf 아키텍처에 대한 응용 프로그램을 어떻게 크로스 컴파일합니까?


16

내가 쓴 큰 응용 프로그램이 있습니다. 다음 시나리오에서 응용 프로그램을 성공적으로 컴파일 할 수 있습니다.

  • Ubuntu 12.04를 실행하는 i386 호스트의 네이티브 컴파일
  • Ubuntu 12.04를 실행하는 PandaBoard에서 기본적으로 (시간이 오래 걸림)
  • armhf PandaBoard 대상에 대해 호스트 PC에서 Qemu 및 chroot 사용 (시간이 오래 걸림)

i386 호스트에서 응용 프로그램을 크로스 컴파일하여 PandaBoard와 같은 대상에서 실행하여 적시에 빌드를 완료하고 싶습니다. 지금까지 저장소에서 arm-linux-gnueabihf 도구 체인을 사용하여 시도한 결과 올바르게 실행되지 않는 바이너리가 생성되었습니다. 이 단계에서는 소프트웨어를 패키지 할 계획이 없습니다.

성공적인 크로스 컴파일을 달성하기 위해 권장되는 방법은 무엇입니까?


크로스 컴파일러 툴체인을 사용한 크로스 컴파일이 작동해야합니다. 그것이 바로 그 목적입니다. 바이너리는 어떤 방식으로 올바르게 실행되지 않습니까?
Gilles 'SO- 악마 그만해'

내 바이너리는 거의 즉시 종료됩니다. strace는 libc.so.6이 예상되는 위치가 아님을 나타냅니다.
조나단 동굴

그것은 링크 옵션으로 고칠 수 있어야합니다 (어느 쪽을 알지 못합니다). 대상 시스템이 Ubuntu를 실행하고 있습니까?
Gilles 'SO- 악마 그만해'

예, 대상은 Ubuntu 12.04도 실행 중입니다. 컴파일러와 링커에 --sysroot 옵션을 사용해야한다고 생각했지만 우분투 툴 체인에서는 사용할 수 없습니다.
Jonathan 동굴

툴체인은 12.04에 저에게 효과적입니다. 방금 amd64에서 테스트했으며 armhf 서버에서 생성 된 바이너리를 성공적으로 실행했습니다. 그러나 나는 i386 빌드 머신을 가지고 있지 않다. 여전히 문제가 발생하면 정교화해야합니다. ldd는 무엇을 말합니까? strace에서 무엇을보고 결론에 도달 했습니까? 명확하게 작동해야하는 간단한 테스트 사례로 문제점을 줄일 수 있는지 확인하고 수행중인 단계를 자세히 설명하십시오.
Robie Basak

답변:


6

https://wiki.linaro.org/Platform/DevPlatform/CrossCompile/UsingMultiArch

https://wiki.ubuntu.com/MultiarchCross

우분투는 크로스 툴체인을 가지고 apt-get install gcc-arm-linux-gnueabihf있지만 차세대 툴체인에 대한 작업은 여기에서 논의됩니다 : http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

이 시점에서 필요한 해결 방법에는 여러 가지가 있습니다. 예를 들어, linaro 위키 페이지에서 다룬 간접 링크를 사용하는 경우, 컴파일 한 직후에 외부 바이너리를 실행하지 않아야합니다.

또한 autotools와 함께 가장 성숙합니다.

패키지가 상당히 빨리 크로스 컴파일되도록했습니다.

apt-get build-dep -aarmhf foo-pkg
apt-get source foo-pkg
cd foo-pkg-*
dpkg-buildpackage -aarmhf

3
이 단계가 수행하는 작업과 스위치 -aarmhf가 무엇인지 설명하십시오. 그들은 많은 사용자들에게 친숙하지 않으므로, 유용한 답변을 얻기 위해 또 다른 계층을 더 깊이 검색해야합니다. 감사.
garyp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.