undefined - 如何设置哪个 libstdc++.so 与 libarrow.so 链接?
问题描述
我在 Redhat 7.4 上使用 gcc7.2 从源代码构建 libarrow.so 和 pyarrow。尽管如此,我仍然遇到以下错误,这似乎是由使用不同版本的 gcc(4.8.5 与 7.2.0)引起的。
[u0017649@sys-97675 ~]$ python
Python 3.7.1 (default, Dec 14 2018, 19:46:41)
[GCC 7.3.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/u0017649/anaconda3/lib/python3.7/site-packages/pyarrow/__init__.py", line 47, in <module>
from pyarrow.lib import cpu_count, set_cpu_count
ImportError: /usr/local/lib64/libarrow.so.13: undefined symbol: _ZN5boost6system16generic_categoryEv
我检查了 ldconfig,它清楚地表明 libarrow.so 与来自 Redhat OS(使用 gcc4.8.5 构建)的 libstdc++.so 链接,而不是与我自己使用 gcc7.2.0 构建的链接。
[u0017649@sys-97675 ~]$ sudo ldd /usr/local/lib64/libarrow.so.13
/usr/local/lib64/libarrow.so.13: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/local/lib64/libarrow.so.13)
/usr/local/lib64/libarrow.so.13: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /usr/local/lib64/libarrow.so.13)
/usr/local/lib64/libarrow.so.13: /lib64/libstdc++.so.6: version `CXXABI_1.3.11' not found (required by /usr/local/lib64/libarrow.so.13)
/usr/local/lib64/libarrow.so.13: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by /usr/local/lib64/libarrow.so.13)
/usr/local/lib64/libarrow.so.13: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /usr/local/lib64/libarrow.so.13)
linux-vdso64.so.1 => (0x00003fff92a70000)
libbrotlienc.so.1 => not found
libbrotlidec.so.1 => not found
libbrotlicommon.so.1 => not found
libdl.so.2 => /lib64/libdl.so.2 (0x00003fff924a0000)
librt.so.1 => /lib64/librt.so.1 (0x00003fff92470000)
liblz4.so.1 => /lib64/liblz4.so.1 (0x00003fff92430000)
libsnappy.so.1 => /lib64/libsnappy.so.1 (0x00003fff92400000)
libz.so.1 => /lib64/libz.so.1 (0x00003fff923c0000)
libzstd.so.1.3.7 => not found
libboost_system.so.1.68.0 => not found
libboost_filesystem.so.1.68.0 => not found
libboost_regex.so.1.68.0 => not found
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00003fff92230000)
我重新检查了我的 LD_LIBRARY_PATH,但看起来没问题。
[u0017649@sys-97675 ~]$ env | grep LD_
LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib:/lib64:/lib:
我做错了什么 ?我该如何解决这种情况?请帮忙。
解决方案
没关系。我傻到在 ldd 前面白白使用 'sudo',这改变了 LD_LIBRARY_PATH 的环境变量。没有 sudo,正确的 LD_LIBRARY_PATH 设置,我可以看到一切都很好。
推荐阅读
- java - 如何解决 IllegalArgumentException 错误?
- swift - 如何根据标签文本快速制作tableview行和标签高度?
- vue.js - 为什么textmate在关闭选项卡后会修改文件mtime?
- ios - UIWebview 不推荐使用的 API 使用
- javascript - jestjs 将错误抛出为`TypeError:_App.default 不是构造函数`
- bash - Shell 脚本模式在特定关键字之前的字符串变量中插入逗号
- java - for循环中的代码没有执行
- mysql - 基于 MySQL 的消息队列
- android - 编辑文本中的文本在android中未垂直对齐
- asp.net - 禁止(未设置 CSRF cookie。):