내 응용 프로그램에서는 boost_python과 python 3.5.2를 사용합니다. 나는 우분투에서 --with-shared
옵션을 사용하여 소스에서 파이썬 3.5.2을 구축 할 때 모든파이썬 3.5.2 소스에서 빌드 된 libpython3.5m.so와 비교되는 libpython3.so는 무엇입니까?
우분투 14에서 소스에서 내장, 나는 libpython3.so
(7.6kB)와 libpython3.5m.so
(12메가바이트)를 얻었다. 나는 큰 하나가 진짜라고 생각하고 작은 하나는 실제 인터페이스로 호출을 전달하는 것일 수 있습니다.
boost_python이 클라이언트가 파이썬 (https://svn.boost.org/trac/boost/ticket/2615)에 연결될 것으로 가정 할 수 있으므로 libpython3.so
을 내 응용 프로그램과 연결했습니다. 하지만 실행하면 미해결 된 기호 오류가 발생합니다.
ldd -r myapp
또는 ldd -r libboost_python.so
은 모두 nm -D libpython3.5m.so
에서 찾을 수있는 해결되지 않은 모든 파이썬 기호를 나열했습니다.
# ldd -r lib/libboost_python3.so
linux-vdso.so.1 => (0x00007ffe767fb000)
libstdc+.so.6 => /usr/lib/x86_64-linux-gnu/libstdc+.so.6 (0x00007f130a7a3000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f130a58d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f130a1c8000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1309ec2000)
/lib64/ld-linux-x86-64.so.2 (0x00007f130acf4000)
undefined symbol: PyExc_ImportError (lib/libboost_python3.so)
undefined symbol: PyProperty_Type (lib/libboost_python3.so)
undefined symbol: PyExc_StopIteration (lib/libboost_python3.so)
undefined symbol: PyBool_Type (lib/libboost_python3.so)
undefined symbol: PyExc_ValueError (lib/libboost_python3.so)
undefined symbol: PyList_Type (lib/libboost_python3.so)
undefined symbol: _Py_NotImplementedStruct (lib/libboost_python3.so)
undefined symbol: PyExc_TypeError (lib/libboost_python3.so)
undefined symbol: PyDict_Type (lib/libboost_python3.so)
...
libpython3.so
libpython3.5m.so
에 의존하지만, 그 자체가 더 그 상징이 없습니다.
나는 libpython3.so
대신 libpython3.5m.so
으로 내 응용 프로그램을 연결해야한다고 생각합니다. 그러나 이상한 것은 내가 libpython3.so를로드 LD_PRELOAD를 사용하는 경우 libpython3.so
을 갖는 방법을 사용하는 이유는, 그 기호는 ldd -r libboost_python3.so
# LD_LIBRARY_PATH=lib LD_PRELOAD=lib/libpython3.so ldd -r lib/libboost_python3.so
linux-vdso.so.1 => (0x00007ffcb51f0000)
lib/libpython3.so (0x00007f6f728e3000)
libstdc+.so.6 => /usr/lib/x86_64-linux-gnu/libstdc+.so.6 (0x00007f6f725df000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f6f723c9000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6f72004000)
libpython3.5m.so.1.0 => lib/libpython3.5m.so.1.0 (0x00007f6f71ae1000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6f718c3000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6f715bd000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6f72d32000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6f713b9000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f6f711b6000)
에서 발견되는 것입니다? 아니면 libpython3.5m.so
만 사용하면됩니까?
'3.5m'이 다른 메모리 관리자와 함께 '3.5'라는 것을 알고 있기 때문에'python3.5m' 프로그램도 있어야합니다. 파이썬 문서에 몇 가지 정보가 있었지만 어디에서 기억이 나지 않습니다. – furas
Ubuntu/Mint를위한 비공식 파이썬 repo -'Ubuntu 14.04'를위한'Python 3.5.2'를 얻을 수 있습니다 - https://launchpad.net/~fkrull/+archive/ubuntu/deadsnakes – furas
Thanks @furas. https://docs.python.org/3/extending/embedding.html flasg : -lpython3.4m 링크의 예를 보여 드리겠습니다.'python3.so' 대신'python3.5m.so'를 사용해야한다고 생각합니다. 지금. –