在Java/PHP/Python框架内,在编译的C/C++代码中运行算法
Running algorithms in compiled C/C++ code within a Java/PHP/Python framework?
偶尔,我会遇到一些编程技术,包括用Java、PHP或Python创建应用程序框架或网站,但当需要复杂的算法时,用C或C++编写这些算法,并在Java/PHP/Python代码中作为类似API的函数调用运行。
我一直在网上搜索这个,除非我不知道这个机构的名字,否则我似乎找不到任何东西
简单地说,我怎么能:
- 在C或C中创建函数或类++
- 将它们编译成DLL/二进制/某种形式
- 从-运行函数
- Java
- PHP
- Python
- 我怀疑类似JSON/XML的输出和输入必须在Java/PHP/Python和C/C++函数之间创建,这样数据就可以很容易地桥接,但这没关系
我只是不知道如何使用这种技术,但它似乎是一种非常聪明的方式,可以利用Java、PHP和Python的强大功能,同时利用非常快速的编程语言执行大型复杂任务。
我脑子里的另一个想法是,如果我在Java/PHP/Python中只使用文字来创建函数,它的速度会和C一样快吗?
我希望用C/C++处理的具体任务是大规模循环、ping数据库和分析映射。还没有任何工作开始,现在都是理论。
您可以使用Boost轻松地使用自定义C++代码扩展python脚本。有关详细信息,请访问此网站:http://www.boost.org/doc/libs/1_50_0/libs/python/doc/
这就是你可以使用它的方式:
char const* greet()
{
return "hello, world";
}
#include <boost/python.hpp>
BOOST_PYTHON_MODULE(hello_ext)
{
using namespace boost::python;
def("greet", greet);
}
您需要将其编译到一个共享库中。您将在windows上获得.dll,在Linux上获得.so。该库将包含必要的代码,使其可用于python。使用示例:
>>> import hello_ext
>>> print hello_ext.greet()
hello, world
以下是更多示例:http://www.boost.org/doc/libs/1_50_0/libs/python/doc/tutorial/doc/html/index.html
使用Boost.Python时,如果不使用弱动态链接,请记住将共享对象链接到Python。PHP和Java也有类似的功能。
至于其他语言,我从未在Java中使用过自定义共享库,但在PHP中使用过,使用原生Api很痛苦。我发现用嗖嗖的方式更愉快。
尽管我同意这些评论(你这样做可能是为了好玩,对商业来说这是个坏主意),但你可能对这个类似的问题感兴趣。上述SWIG框架支持你提到的所有语言。我在一个包含大量遗留C代码的项目中使用了它。不是很简单,但很强大。
对于Java,你可以搜索JNI(Java Native Interface),有很多指南告诉你如何使用它。
与其他提出的解决方案略有不同,您可以查看Gearman
基本上,这是一个经纪人系统。您有worker,在您的情况下可以用C编写,您可以将python/php/java/w/e代码中的任务委派给它。
优点是你可以解耦两个应用程序(如果你用另一种语言重写你的应用程序,你可能会减少工作量,因为你只需要让应用程序与Gearman对话)。
糟糕的是,我认为你会增加开销,这可能会使性能提升变得无关紧要。
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 在c代码之间共享数据的最佳方式
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值