Hi, I'm using pyarrow cython api on macos.
1. OS info:
ProductName: Mac OS X
ProductVersion: 10.13.6
BuildVersion: 17G2112
2. Clang info:
Configured with: --prefix=/Library/Developer/CommandLineTools/usr
--with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 10.0.0 (clang-1000.10.44.4)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

3. Code
setup.py:

from distutils.core import setup
from Cython.Build import cythonize

import os
import numpy as np
import pyarrow as pa


ext_modules = cythonize("example.pyx")

for ext in ext_modules:
    # The Numpy C headers are currently required
    ext.include_dirs.append(np.get_include())
    ext.include_dirs.append(pa.get_include())
    ext.libraries.extend(pa.get_libraries())
    ext.library_dirs.extend(pa.get_library_dirs())

    if os.name == 'posix':
        ext.extra_compile_args.append('-std=c++11')
        # ext.extra_compile_args.append('-stdlib=libc++')

    # Try uncommenting the following line on Linux
    # if you get weird linker errors or runtime crashes
    ext.define_macros.append(("_GLIBCXX_USE_CXX11_ABI", "0"))


setup(ext_modules=ext_modules)

example.pyx:

# distutils: language=c++

from pyarrow.lib cimport *
from libcpp.memory cimport shared_ptr, make_shared, dynamic_pointer_cast
from libc.stdint cimport *
from cpython cimport *
from pyarrow.lib cimport Schema, DataType, ListType, MapType, StructType, Field
from pyarrow.lib cimport CSchema, CField, CDataType, CListType, CMapType

from pyarrow cimport import_pyarrow

import_pyarrow()


def get_array_length(obj):
    # Just an example function accessing both the pyarrow Cython API
    # and the Arrow C++ API
    cdef shared_ptr[CArray] arr = pyarrow_unwrap_array(obj)
    if arr.get() == NULL:
        raise TypeError("not an array")
    return arr.get().length()

def cast_type():
    import pyarrow as pa
    t = pa.list_(pa.string())
    cdef:
        shared_ptr[CDataType] c_type = pyarrow_unwrap_data_type(t)
        shared_ptr[CListType] c_list_type =
dynamic_pointer_cast[CListType, CDataType](c_type)



4. Error
When I execute `python setup.py build_ext --inplace`, I got
example.cpp:649:10: fatal error: 'unordered_map' file not found #include
<unordered_map>.
When I add `-stdlib=libc++`, This error is gone. But when I execute `
python -c "import example;example.cast_type()"`, it crashed. The stack is :
  * frame #0: 0x00007fff67cc2c9a
libc++abi.dylib`__cxxabiv1::__si_class_type_info::has_unambiguous_public_base(__cxxabiv1::__dynamic_cast_info*,
void*, int) const
    frame #1: 0x00000001053d69c8 libstdc++.6.dylib`__dynamic_cast + 136

5. Is there anything that I missed? I'm not sure where I went wrong. Any
suggestions would be appreciated.

Reply via email to