Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

웹프로그래밍

Python Cross-Compile 파이썬 크로스컴파일 본문

리눅스Linux

Python Cross-Compile 파이썬 크로스컴파일

공부모드 2016. 7. 13. 05:10
Python2.6.5를 mips용으로 컴파일하는 과정을 정리하였다.
참고한 사이트들 에서는 PowerPC, ARM용으로 크로스컴파일 하였고 나는 크로스 컴파일러 관련 스트링을 내 환경에 맞도록 mipsel-linux 로 변경하여 같은 절차를 따라감으로써 컴파일을 완료할 수 있었다. 이와같은 사실로 미루어 다른 아키텍쳐용 크로스 컴파일러에도 적용할 수 있을것으로 기대한다.

컴파일 가능한 파이썬 버젼은 다음 웹페이지에서 확인할 수 있으며 해당 버젼에 대한 패치파일도 제공한다.

크로스 컴파일을 위해 어떠한 처리를 해야 하는지, 혹은 각 과정들이 어떠한 역할을 하는지 알고싶다면 다음 페이지를 참고하라. 위의 필자 또한 이 페이지를 참조한듯 하나 이 페이지는 2.1.1 버젼만을 다루고 있어서 실제 프로젝트에 적용할 일은 없을것이다. http://www.ailis.de/~k/archives/19-ARM-cross-compiling-howto.html

선결조건 : 해당하는 플렛폼의 크로스 컴파일러가 설치되어 있어야 한다.

==========================================================================================
여기부터의 내용은 내가 작업한 절차를 기록한 것이며, 자신이 수정한 명령어와 비교용으로 사용할 수 있을것이다.


  • 작업 디렉터리는 파이선 소스 디렉터리이머 디렉터리 내부에 패치 파일(첨부)이 존재해야 한다.
  • 파란색 글씨는 사용하고자 하는 크로스컴파일러의 실행파일이름의 일부분이며 자신의 환경에 맞도록 수정한다.
  • --prefix 변수는 파이선이 설치될 디렉터리이며 이 또한 자신이 원하는 디렉터리로 수정한다.
 
$ ./configure
$ make python Parser/pgen
$ mv python hostpython
$ mv Parser/pgen Parser/hostpgen
$ make distclean
$ patch -p1 < Python-2.6.5-xcompile.patch
$ CC=mipsel-linux-gcc CXX=mipsel-linux-g++ AR=mipsel-linux-ar RANLIB=mipsel-linux-ranlib ./configure --host=mipsel-linux --build=i686-pc-linux-gnu --prefix=/opt/nfsroot/python
$ make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED="mipsel-linux-gcc -shared" CROSS_COMPILE=mipsel-linux- CROSS_COMPILE_TARGET=yes



나는 make이후 다음과 같은 메시지가 출력 되었다. 다음과 같은 모듈들이 빌드되지 않았으며 원인은 여러가지가 있을 수 있겠으나 참고한 웹페이지에는 이에대한 언급이 없다. 아레의 모듈들을 제외한 나머지는 인스톨이 가능하다.
============================================================================================
Failed to find the necessary bits to build these modules:
_hashlib           _tkinter           bsddb185        
sunaudiodev                                           
To find the necessary bits, look in setup.py in detect_modules() for the module's name.


Failed to build these modules:
_bsddb             _curses            _curses_panel   
_sqlite3           _ssl               binascii        
bz2                dbm                gdbm            
nis                readline           zlib   
============================================================================================

크로스컴파일러 라이브러리 디렉터리에 zlib관련 라이브러리와 헤더파일을 설치하면 다음중 binascii, zlib 등 설치할 때 zlib라이브러리가 필요한 모듈들을 컴파일 할 수 있다. 물론 크로스컴파일러로 컴파일 한 라이브러리여야 한다.

 $ make  install HOSTPYTHON=./hostpython BLDSHARED="mipsel-linux-gcc -shared" CROSS_COMPILE=mipsel-linux- CROSS_COMPILE_TARGET=yes prefix=/opt/nfsroot/Python-2.6.5/_install

주의!  위와같이 작업했을 경우 타겟보드에서 파이썬을 실행할 때 경로를 /opt/nfsroot/....부터 잡게 되는것을 발견했다.. 그리하여 위의 명령을 다음과 같이 꿔주고.
 $ make  install HOSTPYTHON=./hostpython BLDSHARED="mipsel-linux-gcc -shared" CROSS_COMPILE=mipsel-linux- CROSS_COMPILE_TARGET=yes prefix=/Python-2.6.5/_install

인스톨이 끝나면 /Python-2.6.5 디렉터리를 /opt/nfsroot/ 밑으로 이동시켜주도록 하자.

타겟보드설정
다음과 같이 실행파일의 심볼릭 링크를 /usr/bin 에 만들었다. 라이브러리경로는 PATH변수에 추가할 필요 없이 실행파일이 자동으로 경로를 찾아가는 것으로 보인다.
/usr/bin$ ln -s /Python-2.6.5/_install/bin/python python

.이상.


Comments