source

Python 인터프리터를 정적으로 컴파일하시겠습니까?

goodcode 2022. 8. 19. 20:48
반응형

Python 인터프리터를 정적으로 컴파일하시겠습니까?

저는 특수 용도의 임베디드 Python 인터프리터를 만들고 있으며 동적 라이브러리에 의존하지 않기 때문에 대신 정적 라이브러리로 인터프리터를 컴파일하고 싶습니다(예:libc.a것은 아니다.libc.so).

또한 Python 표준 라이브러리의 일부인 모든 동적 라이브러리를 정적으로 링크하고 싶습니다.다음 방법으로 할 수 있다는 것을 알고 있습니다.Freeze.py하지만 한 번에 할 수 있는 대안이 있을까요?

나는 이것을 발견했다(주로 Python 모듈의 정적 컴파일에 관한 것).

여기에서는, 설정에 사용하는 파일에 대해 설명합니다.

<Python_Source>/Modules/Setup

이 파일이 없는 경우 다음 파일을 복사하여 만들 수 있습니다.

<Python_Source>/Modules/Setup.dist

Setup파일에는 수많은 문서가 포함되어 있습니다.README소스에 포함되어 있는 것은, 좋은 컴파일 정보도 많이 제공하고 있습니다.

아직 컴파일을 해보지 않았지만, 이 자료들이 있으면 제가 노력했을 때 성공할 수 있을 거라고 생각합니다.제 결과를 여기에 댓글로 올리도록 하겠습니다.

갱신하다

pure-static python 실행 파일을 가져오려면 다음과 같이 구성해야 합니다.

./configure LDFLAGS="-static -static-libgcc" CPPFLAGS="-static"

이러한 플래그를 사용하도록 설정한 후 "라이브러리가 없기 때문에 이름 변경"에 대한 많은 경고가 표시됩니다.이것은, 다음의 설정이 되어 있지 않은 것을 의미합니다.Modules/Setup다음 작업을 수행해야 합니다.

a) 다음과 같이 한 줄(맨 위 부근)을 추가합니다.

*static*

(이것은 아스타리스크/스타 단어 "static"과 공백 없는 아스타리스크입니다.)

b) 정적으로 사용할 수 있는 모든 모듈(연산, 어레이 등)의 코멘트를 해제합니다.

특정 링커 플래그를 추가해야 할 수도 있습니다(위의 링크에서 설명한 바와 같이).지금까지의 제 경험은 도서관이 수정 없이 작동하고 있다는 것입니다.

make를 다음과 같이 실행하는 것도 도움이 될 수 있습니다.

make 2>&1 | grep 'renaming'

정적 링크 때문에 컴파일에 실패한 모든 모듈이 표시됩니다.

CPython CMake Buildsystem은 CMake를 사용하여 Python을 빌드하는 대체 방법을 제공합니다.

python lib를 정적으로 빌드할 수 있으며, 원하는 모든 모듈을 lib에 포함할 수 있습니다.CMake 옵션만 설정

BUILD_SHARED                     OFF
BUILD_STATIC                     ON

를 설정합니다.BUILTIN_<extension>하고 싶다ON.

freeze를 사용한다고 해서 이 모든 것을 한 번에 실행할 수 있는 것은 아닙니다(어떤 방법을 사용하든 여러 빌드 단계(많은 컴파일러 부팅 등)가 필요합니다.먼저 편집한다.Modules/Setup이치libpythonxy를 사용하다아아아아아아아아아아아아아아아아아악config.c.freeze config.c.freeze config.c.freeze config.c adalibpythonxy.a로 통합하거나 별도의 라이브러리를 만듭니다.

통합하려는 각 아키텍처 및 Python 버전에 대해 이 모든 작업을 한 번 수행합니다.응용 프로그램을 빌드할 때 libpythonxy.a와 freeze 라이브러리만 링크합니다.

ELF STATIFIER로 시험할 수 있습니다.전에 써본 적이 있는데 꽤 잘 작동해요.단지 몇 가지 경우에 문제가 있었고, 그 후 또 다른 유사한 프로그램인 Ermine을 사용해야만 했습니다.아쉽게도 이 프로그램은 상업적인 프로그램입니다.

언급URL : https://stackoverflow.com/questions/1150373/compile-the-python-interpreter-statically

반응형