ARMHF를 크로스 컴파일하거나 Debian 또는 Ubuntu 패키지에서 Android를 컴파일하시겠습니까?

ARMHF를 크로스 컴파일하거나 Debian 또는 Ubuntu 패키지에서 Android를 컴파일하시겠습니까?

두 가지 컴파일 옵션이 있습니다.

  • amd64armhfUbuntu 또는 Debian 시스템을 사용하여 패키지를 크로스 컴파일하고 컴파일합니다.
  • QEMU에서 armhfUbuntu 또는 Debian 이미지를 실행합니다.

내가 겪고 있는 문제는 크로스 컴파일을 사용할 때 소스 패키지가 GCC 4.8을 사용하여 컴파일되고 내가 설치한 크로스 컴파일 버전이 GCC 4.9이기 때문에 컴파일이 실패한다는 것입니다.

따라서 저는 armhfQEMU의 Ubuntu 또는 Debian 이미지에서 직접 빌드하기로 결정했습니다.

이제 마지막 질문과 제가 여기에 묻는 이유는 다음과 같습니다.

저는 Android용 Python, 모듈 및 실행 가능한 바이너리를 구축한 몇몇 사람들을 보고 테스트했습니다. 현재 Python 2와 Python 3가 설치되어 있으며 태블릿에 루트 액세스 권한이 있고 다음과 같은 명령을 실행할 수 있습니다.

python -c 'print("hello world!")'

다음과 같은 Python 스크립트를 실행할 수도 있습니다.

python myscript.py

그들은 Python을 컴파일하기 위해 다음 플래그를 사용합니다:

./configure --build=arm --prefix="$PWD"/out LDFLAGS="-static -static-libgcc -Wl,--unresolved-symbols=ignore-all -Wl,--export-dynamic" CPPFLAGS=-static CXXFLAGS=-static CFLAGS="-Os -static" LDFLAGS=-static LD=ld.gold

불행하게도 성공하지 못했습니다. zip다음 명령을 사용하여 데비안 패키지를 컴파일하려고 했지만 작동하지 않았습니다.

apt-get build-dep zip
apt-get source zip
cd zip-3.0
export CFLAGS=-static
export LDFLAGS=-static
export CPPFLAGS=-static
dpkg-buildpackage -rfakeroot -uc -b

패키지를 컴파일한 후 .deb나중에 태블릿에 수동으로 설치하기 위해 모든 바이너리와 실행 파일을 추출한 패키지가 생성됩니다. 디렉토리를 올바르게 보존하고 심볼릭 링크를 사용 chmod하고 chown생성할 수 있는 적절한 권한을 부여하여 링크와 실행 파일을 갖게 합니다. 왜냐하면 Android는 약간 다른 디렉터리 구조를 사용하기 때문입니다.

하지만 이건 작동하지 않아. 모든 것이 컴파일되고 패키지가 생성된 후 위의 설치 프로세스를 수행했을 때 태블릿을 다시 시작하고 이 경우 명령을 실행하여 zip이미 작동하고 있는지 확인했는데 결과는 부정적이었습니다."해당 파일이나 디렉터리가 없습니다"라는 오류 메시지가 나타납니다..

실행을 실행하면 command -v zip파일이 존재하고 올바르게 설치되었으며 올바른 권한이 있음이 표시됩니다. 올바르게 컴파일되었다면 적어도 "오류: somelib .so 찾을 수 없음"과 같은 오류가 발생해야 합니다. 왜냐하면 일부 종속성이 아직 컴파일되지 않았기 때문입니다. 그러나 그렇지 않습니다.

uname -m

나를 내보내세요 armv7l.

해결책이 있나요?

답변1

생각과 반성 나는 해결책을 찾았습니다. 누군가에게 도움이 될 수 있기 때문에 내 답변으로 게시하고 있습니다. 따라서 댓글에서 언급한 것처럼 누군가 EOL 환경에서 구축하는 경우 문제는 다음을 수행 LD_LIBRARY_PATH해야 한다는 것 입니다. 내보내기 /system/lib경로는 LD_LIBRARY_PATHld-linux-armhf.so.*가 인터프리터이므로 실행 파일에 액세스할 수 있도록 하기 위한 것입니다.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/system/lib

심볼릭 링크를 만들어야 할 뿐만 아니라 올바른 Linux 우분투 구조를 유지하려면 모든 환경 변수를 내보내야 합니다.

또한 /system/lib 라이브러리를 루트 경로 /lib에 마운트할 수 있습니다. 이는 더 간단하고 완전한 명령입니다.

su root
mkdir -p /lib
chmod 0755 /lib
mount --bind /system/lib /lib

이 모든 작업은 대상 장치(이 경우 태블릿)에서 수행되어야 합니다.

이렇게 하면 안드로이드 OS와 우분투 OS의 완벽한 조합이 생성됩니다. 또는 데비안 환경에서 데비안 OS를 구축하는 경우 라우팅 측면에서 누락된 경로를 해결해야 하며 일부 경로를 잊어버린 경우 손실된 경로를 해결해야 합니다. 행운을 빌어요!

관련 정보