我有一堆 python 代码,我想将它们“编译”成一个具有 C 接口的共享库,该库可以与其他 C/c++ 程序链接,并且可以在不依赖太多其他库(可能是 python 和其他一些 dll,但它们应该全部包含在最终库的目录中)。
我真的不想为此将 python 代码重写为 C++。我当然可以,但最好有一个独立的库,可以像 dll/so 库一样使用。
我已经尝试过 cython 并想将 python 编译为 C,然后将 C 代码编译为 dll,但这似乎还不能正常工作(我还无法使其完美工作)。然后我也尝试了 bbfreeze - 但 bbfreeze 支持创建 .so 文件吗?无法找到如何做到这一点。有人知道吗?
您还知道其他更简单的选择吗?python代码只需要编译一次。最重要的是,如果它创建一个 .so 文件,无论它有多大,都可以在没有太多依赖项的情况下运行。
我想阻止这样的代码:
unique_ptr<ClassA> captr = unique_ptr<ClassA>(new ClassA());
....
shared_ptr<Base> sptr = move(captr);
Run Code Online (Sandbox Code Playgroud)
此代码应生成编译器错误,但它会在运行时编译并生成双重释放和其他奇怪错误.将unique_ptr分配给shared_ptr毫无意义.如果某些东西被声明为unique_ptr,那么它不应该被共享.但是如果允许将unique_ptr赋值给shared_ptr,那么这个限制就消失了.
不幸的是,当一些函数返回unique_ptr并且有些函数将shared_ptr作为参数时,这个错误太容易了.
问题是:我如何禁止对unique_ptr和shared_ptr的所有模板化变体进行这些赋值,而不管它们被模板化为哪个特定类?
我正在考虑将赋值运算符声明为已删除,但我不确定这样的声明会是什么样子.