Unix/Ubuntu

boost python numpy 컴파일해서 설치

ForceCore 2023. 5. 3. 12:47

Dead snakes로 python 3.10등을 설치할 수는 있지만, numpy는 제공되지 않아서 문제다.

pip install numpy 로 넘파이를 쓸 수는 있는데, C++ 모듈을 짜서 numpy와 연동하는 부분은 linking이 되지 않을 것이다. ㄱ-;;

 

~/usr/venv-3.10 에 venv가 있고, numpy 모듈이 설치가 된 상태로 작업해야 한다. 그래야 부스트 컴파일러가 numpy가 있다고 감지를 해서 numpy 모듈도 빌드할 것이다.

 

Python3.10에 boost_1_82_0.tar.bz2 기준이다.

 

Instructions

1. boost 소스코드를 받아 압축을 푼다.

2. ./bootstrap.sh --with-python=$HOME/usr/venv-3.10/bin/python

3. 이러면 나중에 ./b2 를 했을 때 pyconfig.h 등이 없다고 불평할텐데,

4. ln -s /usr/include/python3.10 ~/usr/venv-3.10/include/python3.10 으로 소프트링크 생성

5. bootstrap이 성공하면 ./b2 --with-python

6. sudo ./b2 install

 

이렇게 성공했다.

설치 결과:

/usr/local 에서 fdfind로 파일 검색을 해보면

 

$ fd boost_numpy
lib/cmake/boost_numpy-1.82.0
lib/cmake/boost_numpy-1.82.0/boost_numpy-config-version.cmake
lib/cmake/boost_numpy-1.82.0/boost_numpy-config.cmake
lib/cmake/boost_numpy-1.82.0/libboost_numpy-variant-shared-py3.10.cmake
lib/cmake/boost_numpy-1.82.0/libboost_numpy-variant-static-py3.10.cmake
lib/libboost_numpy310.a
lib/libboost_numpy310.so
lib/libboost_numpy310.so.1.82.0

이런 파일들이 생겨있다.

 

모듈 컴파일 flag들은

PYTHON3_CONFIG=python3.10-config
FLAGS=`$(PYTHON3_CONFIG) --includes` \
        `$(PYTHON3_CONFIG) --ldflags` \
    `$(PYTHON3_CONFIG) --libs` \
    -lboost_numpy310 \
    -lboost_python310 \
    -lpython3.10

example.so: example.cpp
    g++ -shared -fPIC example.cpp $(FLAGS) -o example.so

 

파이썬 스크립트 실행시 오류:

ImportError: libboost_numpy310.so.1.82.0: cannot open shared object file: No such file or directory

이런 오류가 나올 수 있다.

 

sudo ldconfig /usr/local/lib 으로 어떤 라이브러리가 있는지 다시 스캔시키면 작동할 수도 있다. 만약 된다면 이 방법을 더 추천함. 라이브러리 파일이 생기기는 했는데 운영체제에서 시스템에 어떤 라이브러리 파일이 있는지 스캔을 안해서 그런 것이다.

 

그래도 안 되면 LD_LIBRARY_PATH에 /usr/local/lib 추가하든지,

cd /usr/lib

sudo ln -s /usr/local/lib/libbost_numpy310.so.1.8.0

등으로 필요한 파일들을 소프트링크하면 해결 될 것이다.

윈도우로 치면 c:\windows\system32 에다가 필요한 dll파일들을 복사하는 것이다.