boost::python::init<>() 未定义引用

boost::python::init<>() undefined reference

我正在尝试公开一个简单的 class 和使用 boost python 的构造函数。我有以下内容:

文件:

boost_test
    ├── boost_test.cpp
    └── CMakeLists.txt

CMakeLists.txt:

cmake_minimum_required(VERSION 3.22.1)

project(boost_test)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED YES)

find_package(PythonLibs 3.8 REQUIRED)
find_package(Boost COMPONENTS python38 REQUIRED)

add_library(${PROJECT_NAME} MODULE boost_test.cpp)

set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")

set(CMAKE_SHARED_MODULE_PREFIX "")

target_include_directories(${PROJECT_NAME} PRIVATE ${PYTHON_INCLUDE_DIRS})

target_link_libraries(${PROJECT_NAME} ${PYTHON_LIBRARIES})
target_link_libraries(${PROJECT_NAME} Boost::python38)

boost_test.cpp:

#include <boost/python.hpp>

using namespace boost::python;

struct A {
};

BOOST_PYTHON_MODULE(boost_test) {
    class_<A>("A", init<>());
}

当我尝试在 python 中导入库时,我得到以下信息:

>>> import boost_test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: .../src/boost/boost_test/boost_test.so: undefined symbol: _ZN5boost6python15instance_holder8allocateEP7_objectmmm

如果我在 boost_test.cpp 中将 init<>() 替换为 no_init 我不会收到错误,但我将无法实例化 class .

我真的不知道如何解决这个问题。非常感谢任何帮助。

原来boost安装不正确。我不确定我做错了什么,但是重建 boost 库解决了这个问题。