带有嵌入式 Python 的 Python 扩展模块调用了错误的库
Python extension module with embedded python calls wrong library
我有一个python扩展模块(2.7((由swig生成(,它本身链接到链接到Python 3.33的库。甚至模块也链接到版本 3.33,当它实例化时,它会调用 2.7 定义的 PyFunc,而不是 3.33 中定义的 PyFunc。这只发生在Linux上,并且在Windows上效果很好。我是否需要传递特定的链接器标志以避免此类问题?
谢谢!
在 Windows 下,DLL(类似于 Linux 共享对象(必须在链接阶段解析其所有外部符号,因此在构建扩展期间,扩展与 python 3.0 DLL 隐式链接,一切正常(没有看到 MSVC 命令行,我几乎可以肯定扩展与位于类似 c:/python33/libs/python33.lib
的存根库链接
另一方面,在 Linux 下,共享对象默认链接制度不会解析所有外部符号,因此 -lpython
的 LD 规范可能会在运行时解析为基于 2.7 的加载共享对象......
所以你有2个选择:
由于您获得了源代码,因此在Linux下,您可以通过
dlopen
动态加载 libpython33.so 以避免这种"DLL地狱">静态方法,您应该指定 python3.3 的确切位置,即而不是"模糊"的
-lpython
(解析为 python2.7(类似/usr/lib/python3.3/libpython33.so
相关文章:
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 为什么PyImport_ImportModule python 3.7.2 中出现段错误?
- OpenCV - Python 断言错误:SAD 算法 - 立体相机视差图计算
- 如何在 Python C++ 混合库中调试非确定性分段错误?
- 为 Python 构建共享库C++时出现分段错误
- NS3 - python.h 文件无法定位编译错误
- Python os.system() 返回错误值
- 致命的 Python 错误:无法获取随机数来初始化 Python
- 使用 Pybind11 将函数集成到 Python C++错误,同时使用 PYBIND11_MODULE
- Python 错误:在 SWIG 生成的C++模板化代码模块中没有定义构造函数
- 致命的Python错误:Py_Initialize:无法加载文件系统编解码器&ModuleNotFoundError
- Python 错误:PyThreadState_Get:编译扩展后没有当前线程
- “致命的 Python 错误:PyThreadState_Get:没有当前线程”是什么意思
- 使用 IPython 嵌入 Python 错误: [错误 193] %1 不是有效的 Win32 应用程序
- 致命 Python 错误:无法使用C++绑定创建自动 TLSkey 映射
- 如何使用Boost获取SyntaxError、NameError等的Python错误信息
- 为什么PyGILState_Release抛出致命的 Python 错误
- 由python导入的python错误
- helloworld示例中的Boost.python错误
- 不支持嵌入 python 错误按文件名导入