Python导入C++扩展时出现运行时未定义符号问题求助
Python C++扩展导入时的Arrow符号未定义问题
我有一个Python包my_python_package,其中包含一个带单个函数my_ext_func的C扩展my_ext。该扩展依赖自研C库libmycpp,而libmycpp又依赖libarrow。导入扩展函数时出现如下错误:
$ python3 Python 3.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from my_python_package.my_ext import my_ext_func Traceback (most recent call last): ... ImportError: /usr/local/lib/libmycpp.so: undefined symbol: _ZNK5arrow6Status8ToStringB5cxx11Ev
已确认信息
libmycpp编译链接正常,已有可正常运行的C++可执行文件my_ext.so已正确链接arrow库,验证命令及输出:
ldd my_ext.so | grep arrow libarrow.so.1200 => /lib/x86_64-linux-gnu/libarrow.so.1200 (0x00007f2f27f18000)
异常场景对比
- 进入
my_ext.so所在目录启动Python并直接导入时无报错:
$ python3 Python 3.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from my_ext import my_ext_func >>>
- 更新: 进入
my_ext模块所在目录,通过包路径导入也正常:
$ cd ~/.local/lib/python3.8/site-packages/my_python_package/my_ext $ python3 Python 3.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from my_python_package.my_ext import my_ext_func >>>
但导入其他依赖该扩展函数的模块时会报错。
更新2: 启动Python前设置
LD_PRELOAD=/lib/x86_64-linux-gnu/libarrow.so.1200则一切正常,寻求问题的根本解决方法。
内容的提问来源于stack exchange,提问作者Jerome D Walker
相关产品推荐
相关产品推荐

