我在做一个黑白棋游戏,我用C语言编写了我的机器人算法。然而,我想创建一个基于Web的GUI,并以某种方式能够通过Web应用程序调用我用C编写的算法(我不想使用JavaScript重新编码我的机器人)。我在网上搜索了一下,我认为这个问题与API有关,但我真的不知道该怎么做或从哪里开始。有什么帮助吗?
kpbwa7wx1#
假设你已经有了一个webapp的后端,你可以将C代码编译成一个DLL(在Windows中)或SO(在基于Unix的系统中)文件,然后在后端代码中调用它。例如,创建SO文件
gcc -c -fPIC myfile.c -o myfile.o gcc -shared myfile.o -o libmyfile.so
我们正在将代码编译为目标文件并将其链接到SO文件。-fPIC标志指定位置无关的代码,这是创建共享对象所必需的。请注意,共享对象的名称约定通常是在它们前面加上“lib”,并使用扩展名. so。一旦有了DLL或SO文件,就可以在后端服务器代码中加载它,并调用C算法中定义的函数。加载库的确切方法取决于您为后端选择的编程语言和框架。给予Node JS服务器为例,1.首先安装ffi包
npm install ffi
1.在代码中执行类似于
const ffi = require('ffi'); // Load the shared object file const myLibrary = ffi.Library('/path/to/myLibrary.so', { 'myFunction': ['int', ['int', 'int']] }); const result = myLibrary.myFunction(3, 4); console.log(result);
在本例中,myFunction是在共享对象文件myLibrary.so中定义的函数。该函数接受两个整数参数并返回一个整数结果。您可以根据特定的共享对象文件调整函数签名和数据类型。希望对你有帮助。
1条答案
按热度按时间kpbwa7wx1#
假设你已经有了一个webapp的后端,你可以将C代码编译成一个DLL(在Windows中)或SO(在基于Unix的系统中)文件,然后在后端代码中调用它。
例如,创建SO文件
我们正在将代码编译为目标文件并将其链接到SO文件。-fPIC标志指定位置无关的代码,这是创建共享对象所必需的。
请注意,共享对象的名称约定通常是在它们前面加上“lib”,并使用扩展名. so。
一旦有了DLL或SO文件,就可以在后端服务器代码中加载它,并调用C算法中定义的函数。加载库的确切方法取决于您为后端选择的编程语言和框架。
给予Node JS服务器为例,
1.首先安装ffi包
1.在代码中执行类似于
在本例中,myFunction是在共享对象文件myLibrary.so中定义的函数。该函数接受两个整数参数并返回一个整数结果。您可以根据特定的共享对象文件调整函数签名和数据类型。
希望对你有帮助。