arrow::py::import_pyarrow() 导致 SEGMENTATION FAULT CMakeLists.txtcpp 文件输出调试模式

问题描述

我正在尝试使用 arrow-cpp 构建一个表,然后将其传输回 python。

为了做到这一点,我需要事先调用 arrow::py::import_pyarrow(),但这会导致一个 SEGFAULT。

谁能帮忙找出我做错的地方?

这是一个最小的例子

CMakeLists.txt

cmake_minimum_required(VERSION 3.20.0)
project(TEST)
set(CMAKE_CXX_STANDARD 17)
set(python3_EXECUTABLE "/home/auderson/miniconda3/bin/python3.8")

list(APPEND CMAKE_PREFIX_PATH "/home/auderson/miniconda3/lib/cmake/arrow")
find_package(Arrow required)
find_package(ArrowPython required)
find_package(python3 COMPONENTS Interpreter Development)


include_directories(.
        /home/auderson/miniconda3/lib/python3.8/site-packages/pyarrow/include
        ${python3_INCLUDE_Dirs})

add_executable(TEST
        mini_t.cpp
        )

target_link_libraries(${PROJECT_NAME} PRIVATE arrow_shared)
target_link_libraries(${PROJECT_NAME} PRIVATE arrow_python_shared)
target_link_libraries(${PROJECT_NAME} PRIVATE ${python3_LIBRARIES})

cpp 文件


#include "arrow/python/pyarrow.h"

int main() {
    return arrow::py::import_pyarrow();
}


输出(调试模式)

Signal: SIGSEGV (Segmentation fault)

Process finished with exit code 1

如果不是在调试模式:

Process finished with exit code 139

箭头的其他功能工作正常。

解决方法

C++ 应用程序不会初始化 Python 解释器。这是一个正确执行此操作的示例 C++ 可执行文件:

https://github.com/apache/arrow/blob/8e43f23dcc6a9e630516228f110c48b64d13cec6/cpp/src/arrow/python/util/test_main.cc

这也在

上得到了回答

https://lists.apache.org/thread.html/ra6a5d523a1cf9a305ae9a57d7abb8d5afdfa252487165858aa24e323%40%3Cuser.arrow.apache.org%3E

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...