2013-03-16 1 views
5

Emdebian이 설치된 Raspberry PI가 설치되어 있고 프로젝트를 크로스 컴파일하려고합니다.기존 rootfs와 사용자 정의 도구 체인 결합

툴체인을 구하고 간단한 프로젝트를 만드는 방법에 대한 많은 문서가 있습니다. 나 자신이 크로스 - 툴 -와 툴체인을 만들 수 있었고 잘 작동하는 안녕하세요 세계 프로그램을 썼다.

다른 라이브러리에 종속성이있는 Qt와 같은 더 복잡한 프로젝트를 크로스 컴파일하는 방법은 내가 알지 못합니다.. libdbus을 예로 사용하십시오. Qt의 종속성 중 하나입니다.

이미 설치된 Emdebian에는 libdbus.so가 포함되어 있으므로 당연히 필자는 자신의 libdbus.so를 크로스 컴파일하는 대신 Qt의 모든 종속성을 컴파일하는 데 많은 시간이 걸릴 것이므로 당연히이를 사용하고 싶습니다.

크로스 컴파일

, 이해까지로, 두 가지 중요한 디렉토리가있다 :

  1. 설치된 모든 라이브러리와 응용 프로그램을 살고있는 "준비" 디렉토리. 이것은 처음에는 툴체인의 sysroot 디렉토리의 사본이며, 크로스 컴파일 될 때 더 많은 라이브러리로 채워집니다.
  2. "rootfs" 디렉토리는 기기에있는 디렉토리와 동일합니다. 기본적으로 문서 및 헤더 파일과 같은 불필요한 항목이없는 스테이징 디렉토리의 복사본입니다. 내가 아는 한 최선의 방법은 스테이징 디렉토리의 필수 파일을 rootfs로 복사하는 것입니다.

rootfs 디렉토리를 얻는 것은 장치에서 NFS 마운트가 될 수 있기 때문에 쉽습니다. 그러나 PI에서 기존의 Emdebian 설치를위한 스테이징 디렉토리를 얻으려면 어떻게해야합니까? 스테이징 디렉토리에는 dbfs 헤더와 같은 것들이 포함되어 있어야하는데, 이는 rootfs에 설치되지 않습니다.

어떤 사람들은 장치에 dbus 헤더를 간단히 설치합니다. apt-get libdbus-dev을 설치 한 다음 rootfs를 스테이징 디렉토리로 사용하십시오. 이 설정을 사용하면 rootfs와 스테이징 사이에 구별이 없으며 rootfs가 헤더, 문서 등으로 오염된다는 단점이 있습니다. 장점은 물론 쉽습니다.

호스트 컴퓨터의 준비 디렉토리에 dbus 헤더를 가져 오는 가장 좋은 방법은 무엇입니까? 사람들이이 상황에서 사용하는 일반적인 접근 방식은 무엇입니까?

부수적 인 질문으로, 왜 툴체인을 얻고, 프로그램을 컴파일 한 다음이를 대상에 복사하는 접근 방식이 전혀 작동하지 않습니까? 툴체인은 libc, libstdC++ 등의 자체 버전을 제공합니다. 타겟에 설치된 버전과 호환되지 않습니다. 특히 crosstool-ng로 컴파일 된 커스텀 툴체인을 사용할 때?

(내가 Qt를 컴파일하는 방법을 요구 하진 않았어합니다, 나는 나 자신을 알아낼 수 있습니다. 내 질문은 기존 설치/rootfs와 사용자 정의 툴 체인을 결합 할 때 취할 수있는 방법에 대해 더 일반적이다)

답변

1

을 내 경험상 dbus를 컴파일 할 필요가 없습니다.당신은 그것을 할 수

데비안이 crosstool-ng에서 툴체인을 크로마뇽 인은 컴파일 만들기 https://wiki.debian.org/EmDebian/CrossDebootstrap
으로 debootstrap을하여 rootfs를 건너, 커널 버전과 eglibc 버전은 1 단계
만든 rootfs와 동일 있는지 확인 만들기 일 rootfs에서

make install DESTDIR=<stage directory> 

복사 QT 종속 라이브러리에 의해 무대 디렉토리에 QT를 설치

CPPFLAGS=-I<rootfs>/usr/include \ 
LDFLAGS=-L<rootfs>/lib -L<rootfs>/usr/lib -Wl,-rpath-link,<rootfs>/lib,<rootfs>/usr/lib \ 
./configure <your options> 
make 

에 의해 QT 구축 e 무대 디렉토리

그래서 스테이지 디렉토리는 오염없이 최소로 유지된다는 것을 알 수 있습니다.

+0

굉장하고, debootstrap은 내가보고있는 것과 정확히 같습니다. OpenSuSE에서 작동하도록 약간의 노력을했지만, 결국에는 완벽합니다. :) –

관련 문제