armel용 Python 2.7.16(32비트) 크로스 컴파일

armel용 Python 2.7.16(32비트) 크로스 컴파일

armel 아키텍처를 사용하는 장치가 있고 파일 시스템이 VM(amd64 아키텍처)에서 실행되고 있습니다. 장치에 컴파일 요구 사항을 설치할 충분한 공간이 없기 때문입니다. 운영 체제는 Debian 9(확장 버전)입니다.

Python을 다운로드하고 다음 내용으로 config.site 파일을 만듭니다(다른 답변에서 찾았습니다).

ac_cv_file__dev_ptmx=no
ac_cv_file__dev_ptc=no

그리고 나는 도망쳤다 ./configure. 마지막에는 다음과 같은 다양한 옵션이 있습니다(다른 포럼에서 찾았습니다).

CONFIG_SITE=config.site ./configure --target=arm-linux --host=arm-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" --build=armel --enable-ipv6

지금 나에게 필요한 것은 무엇인가 --[dis|en]able-ipv6?

다른 설정으로 작동하면 작동하고 make완료되면 실행합니다.

checkinstall -D --install=no --fstrans=yes

실행이 성공하면 armel 아키텍처를 사용하는 다른 장치에 .deb 패키지를 설치하지만 실행하면 python오류가 발생합니다 bash: /usr/local/bin/python: cannot execute binary file. 이유를 설명해 주실 수 있나요?

고쳐 쓰다 Debian 패키지를 설치한 후 출력 file /usr/local/bin/python심볼릭 링크는 입니다 /usr/local/bin/python2.7.

python2.7: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped

gcc가 x86-64로 컴파일되는 것이 맞다는 것을 알았습니까? 아니면 바꿔야 하나요? 그렇다면 어떻게 변경할 수 있나요?

컴파일에 대해 더 알고 싶습니다. 자세한 답변을 작성하거나 답변에 소스 링크를 포함하세요.

미리 감사드립니다!

답변1

컴파일은 C 등의 언어를 CPU 명령어로 번역하는 과정이다. CPU마다 명령어 세트가 다릅니다. armel과 x86_64의 다른 CPU 언어라고 생각하세요.

모든 명령어 세트(언어)로 작성할 수 있는 컴파일러를 만드는 것은 기술적으로 가능하지만 직접 전환할 수 있는 컴파일러는 없다고 생각합니다.

따라서 GCC를 사용하여 armel용으로 컴파일하려면 armel 작성용으로 컴파일된 GCC 복사본이 필요합니다. 문제는 다음과 같습니다... 달성하려는 목표를 달성하려면 armel용으로 컴파일할 GCC 복사본이 필요하지만 해당 GCC 복사본은 x86_64(컴파일 대상)에서 실행되어야 합니다. 이를 크로스 컴파일러라고 합니다. 하나의 명령어 세트에 대해 코드를 컴파일하고 사용 시 해당 코드를 다른 명령어 세트로 컴파일하는 컴파일러입니다.

필요한 컴파일러는 gcc-arm-linux-gnueabi(https://packages.debian.org/buster/gcc-arm-linux-gnueabi). 이 가져오기가 # include <...>헤더 파일(컴파일 실패) 또는 라이브러리( )에 걸려 있는 것을 발견할 수 있습니다 undefined reference to .... 유감스럽게도 이 작업을 너무 오랫동안 수행하지 않아서 컴파일러에게 대상 시스템의 헤더와 라이브러리를 사용하도록 지시하는 방법을 실제로 기억하지 못합니다. 이것은 당신이 조사해야 할 것일 수도 있습니다.

관련 정보