如何将 .so 文件中的函数导入我的 python 程序?

How to get functions from a .so file into my python program?

提问人:Gopal Kulkarni 提问时间:10/26/2022 最后编辑:BotjeGopal Kulkarni 更新时间:10/26/2022 访问量:316

问:

我是一名机械工程师,试图在深度学习领域取得成功,所以我的编程知识非常基础。我有一个 .so 格式的预编译文件,我的 python 文件(nndistance.py)从这个特定文件中导入两个函数,如下所示。

从指标。StructuralLoss.StructuralLoss后端导入 NNDistance, NNDistanceGrad

但我面临以下错误

ImportError: ./StructuralLoss/St ructuralLossBackend.cpython-38-x86_64-linux-gnu.so: undefined symbol: _ZN6caff e28TypeMeta21_typeMetaDataInstanceIdEEPKNS_6detail12TypeMetaDataEv

我该如何解决这个问题?

我试图通过编写一个脚本来获取它们

def __bootstrap__():
   global __bootstrap__, __loader__, __file__
   import sys, pkg_resources, imp
   __file__ = pkg_resources.resource_filename(__name__,'StructuralLossesBackend.cpython-38-x86_64-linux-gnu.so')
   __loader__ = None; del __bootstrap__, __loader__
   imp.load_dynamic(__name__,__file__)
__bootstrap__()

我已将其保存为 StructuralLossesBackend.py

python 共享库 链接器错误 未定义引用

评论

1赞 Useless 10/26/2022
听起来有点像您的共享库 (.so) 依赖于它在运行时找不到的另一个库(可能是 caffe2)。运行并查看运行时链接器告诉您的内容 - 任何列为“未找到”的库都是您需要查找或需要添加的依赖项ldd ./StructuralLosses/StructuralLossesBackend.cpython-38-x86_64-linux-gnu.soLD_LIBRARY_PATH
0赞 doctorlove 10/26/2022
我们可能需要一些关于你如何构建 so(和代码)的详细信息。什么是未定义符号:_ZN6caff?是在如此的符号中吗?
0赞 Gopal Kulkarni 10/26/2022
我不确定。我必须从谷歌驱动器下载这个 .so 文件(按照 git 存储库所有者的指示),所以,可悲的是,即使我没有关于这个文件的很多细节
0赞 Botje 10/26/2022
显然,它缺少库中的符号。这个文件旁边还有其他文件吗?caffe.so
0赞 Gopal Kulkarni 10/26/2022
@Botje号它只有这个文件。

答: 暂无答案