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 库解决了这个问题。
我正在尝试公开一个简单的 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 库解决了这个问题。