在开源项目AA>中,我们使用Python C API将Python/Cython和C/C++模块混合到一个C++库中。API只将一些函数的名称从2更改为3。假设库是在没有这些函数的情况下编写的。如果用Python2编译,它会链接到Python3吗?反之亦然?API头中的宏是否阻止了此操作?
如果有一个库二进制文件可以链接到这两个库,那么我们就不会再为打包而烦恼了。
最佳答案
不,不行。不要尝试。
即使从3.5到3.6,二进制模块也不能保证是二进制可移植的。如果你很幸运,那么有一些机制会阻止你做这种疯狂的事。但是,如果您设法以某种方式链接库,则会有一些细微的差异,这些差异将导致严重的错误,例如PyObject
的布局更改等。
必须重新编译Python接口以获得准确的Python版本。Python 2和3之间的源代码兼容性是另一回事,而且相对容易实现。
关于python - 使用Python C API版本2和3的二进制文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44322187/