Я нашел решение: новый "CMakeLists.txt" выглядит следующим образом:
cmake_minimum_required(VERSION 3.0)
project(greeter)
# Find necessary packages
find_package(PythonInterp 3)
find_package(PythonLibs 3 REQUIRED)
include_directories(${PYTHON_INCLUDE_DIR})
# find_package(Boost COMPONENTS python3 REQUIRED)
find_package(Boost COMPONENTS python${PYTHON_VERSION_MAJOR})
include_directories(${Boost_INCLUDE_DIR})
# Build & Link our library
add_library(hello MODULE hello.cpp)
# setting Boost_LIBRARIES & PYTHON_LIBRARIES
if(UNIX)
set(Boost_LIBRARIES "/usr/lib/x86_64-linux-gnu/libboost_python3-py36.so.1.65.1")
set(PYTHON_LIBRARIES "/usr/lib/x86_64-linux-gnu/libpython3.6m.so")
endif()
target_link_libraries(hello ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
# don't prepend wrapper library name with lib
set_target_properties(hello PROPERTIES PREFIX "")
Это дает следующий вывод:
$ python3 hello.py
hello, world
На самом деле, я обнаружил проблему в hello.so
(NEW) файл:
$ ldd hello.so
linux-vdso.so.1 (0x00007fffda757000)
libboost_python3-py36.so.1.65.1 => /usr/lib/x86_64-linux-gnu/libboost_python3-py36.so.1.65.1 (0x00007f2a52ec0000)
libpython3.6m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 (0x00007f2a52810000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f2a52480000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f2a52260000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2a51e60000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2a51c40000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f2a519f0000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f2a517d0000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2a515c0000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f2a513b0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2a51010000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2a53400000)
Итак, отсутствует libboost_python3-py36.so.1.65.1
т.е. boost_ python, который уже был установлен в моей системе через $ sudo apt-get install libboost-all-dev
:
- просто найдите это с помощью:
$ ls /usr/lib/x86_64-linux-gnu | grep libboost_python3 | grep 1.65.1
libboost_python3-py36.so.1.65.1
ПРИМЕЧАНИЕ: для 64-битной машины он сохраняется в /usr/lib/x86_64-linux-gnu
, в противном случае в папке /usr/lib
.
Спасибо @thatrobotguy & @squareskittles за внимание к моей проблеме. СПАСИБО! еще раз ..