有一份跨平台的 C++源码,已经使用 ctypes
实现了对 DLL 的调用。想要将 C++代码和它的 Python 封装一起打包发布到 PyPI,请问各位怎样保证它们的跨平台性?
试想过的思路有:
还请各位 V 友赐教,好人一生平安。
1
jimliang 2019-07-25 16:16:33 +08:00
可以考虑把 C++编译成 WebAssembly
|
2
scholarOfSin OP @jimliang 搜了一下,没明白 Python 怎么调用 WebAssembly ?
|
3
Rorysky 2019-07-25 16:23:40 +08:00 via iPhone
@scholarOfSin 一楼也就那么一说
|
4
guiqiqi 2019-07-25 16:26:17 +08:00 via iPhone
我一般就是把 C++的兼容性做好,然后把源代码一起和 python 打包发布;
之后在 setup.py 里用 distutils 编译 CPP 部分(这样也要求使用者有合适的编译环境)。 这种问题却是不好解决,可能我知识量太少,但是我知道的有这种带 C 发布的没一个好办的 - 有个包叫 pycrypto,那阵子安装真的是头痛死了。 |
5
coderluan 2019-07-25 16:29:20 +08:00
Windows 等平台时函数名会混淆? 具体是指什么,我感觉这个是可以解决的。
|
6
scholarOfSin OP |
7
coderluan 2019-07-25 16:37:03 +08:00
@scholarOfSin 我看那个回答下面常见的可能性都提到了,你都试了还是解决不了?
|
8
scholarOfSin OP @coderluan 用到的函数前加上里面提到的语句就能解决了,所以才能够用 ctypes 调用成功。但是这部分代码只能在 VS 下使用,GCC 编译不通过,问题就来了
|
9
coderluan 2019-07-25 17:19:35 +08:00 1
@scholarOfSin 你说的是__declspec(dllexport)?这个本来就是 Windows 专有的,给你个跨平台的导出写法,你自己试试吧。
#if defined(_MSC_VER) // Microsoft #define EXPORT __declspec(dllexport) #define IMPORT __declspec(dllimport) #elif defined(__GNUC__) // GCC #define EXPORT __attribute__((visibility("default"))) #define IMPORT #else // do nothing and hope for the best? #define EXPORT #define IMPORT #pragma warning Unknown dynamic link import/export semantics. #endif |
10
scholarOfSin OP @coderluan 受教了,我去试试。
|
11
eastlhu 2019-07-26 09:10:46 +08:00
swig
|