在 Python ctypes 中加载共享库期间出现分段错误(核心转储)
Posted
技术标签:
【中文标题】在 Python ctypes 中加载共享库期间出现分段错误(核心转储)【英文标题】:Segmentation fault (core dumped) during loading shared library in Python ctypes 【发布时间】:2015-08-28 00:49:22 【问题描述】:我正在尝试在 Python ctypes 中加载 C 共享库。 (Linux)
但它在加载共享库时会生成一个Segmentation fault (core dumped)
。
这意味着(如果库的名称是A.so
)
import ctypes
ctyps.CDLL("A.so") #it makes Segmentation fault
我想知道的是,如果在加载库期间发生Segmentation fault
,通常会出现什么问题。
我不明白它是正常编译的,我没有调用库中的函数。
加载库时哪个部分导致了这个错误?
【问题讨论】:
你有被dlopen
调用的constructor
函数吗?有关此操作的示例,请参阅我的回答 here。
【参考方案1】:
在我的情况下,这是template
type
C++
方面的问题。
例如,我用template
定义了一个类,如下所示。
# a.hpp
template<typename msgType>
class A
public:
int get(msgType& msg);
...
...
;
#a.cpp
template<typename msgType>
int A<msgType>::get(msgType& msg)
...
template int A<std::string>::get(std::string& msg);
然后,如果我在某处将A
类与std::string
以外的其他类型一起使用,它会在加载C++ 共享库时引导Segmentation fault (core dumped)
。
【讨论】:
以上是关于在 Python ctypes 中加载共享库期间出现分段错误(核心转储)的主要内容,如果未能解决你的问题,请参考以下文章
我可以阻止 C++ dll 在 Python Ctypes 中加载吗?