在 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】:

在我的情况下,这是templatetypeC++ 方面的问题。 例如,我用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 中加载吗?

需要在 GDB 中加载共享库的调试符号

在开发容器和电子中加载共享库时出错

如何将 C++ 类与 ctypes 一起使用?

修改 glibc 动态链接器以检查共享库是不是已在另一个进程中加载

无法在 python (3.4) 中加载 dll 文件