pyarrow cython包装器Arrow:表到pyarrow.由于未定义符号,表失败



我只需将一个pyarrow.Table传递给C++arrow::Table,然后再传递回python。但失败了:

trade.cpython-39-x86_64-linux-gnu.so: undefined symbol: _ZNK5arrow6Status8ToStringB5cxx11Ev

我已经做了一些调查,怀疑pyarrow_wrap_table有问题,但不知道如何解决。非常感谢您的帮助!

以下是源文件:

文件:table_func.h

#ifndef TABLE_FUNC_H
#define TABLE_FUNC_H
#include <vector>
#include <exception>
#include <arrow/api.h>
#include <arrow/result.h>
#include <memory>
namespace MktData
{
std::shared_ptr<arrow::Table> aggregateTradeTable(const std::shared_ptr<arrow::Table> &);
};

文件:table_func.cpp

std::shared_ptr<arrow::Table> MktData::aggregateTradeTable(const std::shared_ptr<arrow::Table> &trades)
{
return trades;
}

文件:decl.pxd

# distutils: language = c++
from pyarrow.lib cimport *
cdef extern from "table_func.h" namespace "MktData":
cdef shared_ptr[CTable] aggregateTradeTable(shared_ptr[CTable] &);

文件:trade.pyx

from libcpp cimport bool, vector, memory
from pyarrow.lib cimport *
from decl cimport aggregateTradeTable
def aggregate_trades(obj):
cdef shared_ptr[CTable] trades = pyarrow_unwrap_table(obj)
if trades.get() == NULL:
raise TypeError("not an table")
cdef shared_ptr[CTable] result = aggregateTradeTable(trades)
if result.get() == NULL:
raise TypeError("result incorrect")
return pyarrow_wrap_table(result)

文件:setup.py

from setuptools import setup
from Cython.Build import cythonize
from setuptools import Extension, setup
import pyarrow as pa
import numpy as np
sourcefiles = ['trade.pyx', 'table_func.cpp']
extensions = [Extension("trade", sourcefiles)]
ext_modules = cythonize(extensions, gdb_debug=True)
for ext in ext_modules:
ext.include_dirs.append(pa.get_include())
ext.include_dirs.append(np.get_include())
ext.libraries.extend(pa.get_libraries())
ext.library_dirs.extend(pa.get_library_dirs())
setup(ext_modules=ext_modules, language="c++")
解决的

问题

文件:setup.py

...
for ext in ext_modules:
...
ext.define_macros.append(("_GLIBCXX_USE_CXX11_ABI", "0"))

最新更新