gpt4 book ai didi

python - 清理时使用 Boost Python 的段错误

转载 作者:太空狗 更新时间:2023-10-29 21:16:54 26 4
gpt4 key购买 nike

我正在尝试遵循一些使用 libboost-python3 将 C++ 结构传递给 Python 的简单示例。该功能按预期工作,但在退出时出现段错误。

我已将其提炼为最简单的示例,但在释放创建的对象时我仍然遇到段错误。

/* boost_python_exemplar.cpp: */

#include <boost/python.hpp>

struct Test_Struct
{
int a;
};

BOOST_PYTHON_MODULE(libboost_python_exemplar)
{
using namespace boost::python;

class_<Test_Struct>("Test_Struct")
.def_readwrite("a", &Test_Struct::a);
}

然后是附带的python代码:

# test.py

import libboost_python_exemplar
d = libboost_python_exemplar.Test_Struct()
# Segfault occurs here when the import is being cleaned up

我需要使用引用计数还是必须执行明确的清理步骤?鉴于这个示例非常简单,我很难找出它有什么问题。

还有随附的 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.3)
project(Boost_Python_Exemplar)

SET(Boost_INCLUDE_DIR /usr/local/boost/1.55.0/include/)
SET(Boost_LIBRARY_DIR /usr/local/boost/1.55.0/lib64/)
FIND_PACKAGE(Boost 1.55)
IF(Boost_FOUND)
INCLUDE_DIRECTORIES("${Boost_INCLUDE_DIRS}" "/usr/local/anaconda_py3/include/python3.4m/")
SET(Boost_USE_STATIC_LIBS_OFF)
SET(Boost_USE_MULTITHREADED ON)
SET(Boost_USE_STATIC_RUNTIME OFF)
FIND_PACKAGE(Boost 1.55 COMPONENTS python3 REQUIRED)

ADD_LIBRARY(boost_python_exemplar SHARED boost_python_exemplar.cpp)
TARGET_LINK_LIBRARIES(boost_python_exemplar ${Boost_LIBRARIES})
ELSE()
MESSAGE(FATAL_ERROR "Unable to find correct Boost version.")
ENDIF()

IF(CMAKE_COMPILER_IS_GNUCXX)
ADD_DEFINITIONS("-Wall" "-pedantic" "-g")
ELSE()
MESSAGE(FATAL_ERROR "CMakeLists.txt requires GCC")
ENDIF()

最佳答案

Here有人得到了同样的错误。他在 g++ 编译器中使用 ld 链接器。使用 g++ 链接器解决了他的问题。您应该在 CMakeFiles/boost_python_exemplar.dir/link.txt 中检查您的链接器。

关于python - 清理时使用 Boost Python 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34279017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com