Я использую Python 3.7 из Anaconda3 v5.3, который был собран с gcc 7.2, на Redhat 7.5 ppc64le, который построен с gcc 4.8.4.
Я построил pyarrow в этой среде, но продолжаю получать следующую ошибку при выполнении импорта pyarrow.
$ python
Python 3.7.0 (default, Jun 28 2018, 13:02:24)
[GCC 7.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyarrow
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/bsyu/files/arrow/python/pyarrow/__init__.py", line 54, in <module>
from pyarrow.lib import cpu_count, set_cpu_count
ImportError: /home/bsyu/files/arrow/python/pyarrow/lib.cpython-37m-powerpc64le-linux-gnu.so: undefined symbol: _ZNK5arrow11StructArray14GetFieldByNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Я вижу, что это очень распространенная ошибка при связывании общих объектов, созданных с использованием разных версий gcc. Я попытался собрать pyarrow с помощью gcc 7.2, но в итоге получилась еще одна неопределенная ошибка символа.
ImportError: /home/bsyu/anaconda3/lib/python3.7/site-packages/pyarrow/libparquet.so.12: undefined symbol: _ZN5boost13match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISB_EEEE12maybe_assignERKSF_
У меня два вопроса:
Какова общая рекомендация, когда мы используем Anaconda3 v5.3 на Redhat 7.5? Использовать gcc 7.2? Использовать -D_GLIBCXX_USE_CXX11_ABI=0
? Вас не беспокоят эти неопределенные ошибки символов?
Как нам найти значение _GLIBCXX_USE_CXX11_ABI, используемое для общего объекта? Я попробовал строки, но он показывает только кучу ничего.
$ strings /home/bsyu/anaconda3/lib/python3.7/site-packages/pyarrow/libparquet.so.12.0.0 | grep CXXABI
CXXABI_1.3.11
CXXABI_1.3.2
CXXABI_1.3
CXXABI_1.3.3
CXXABI_1.3.5