如何快速部署语音情感识别?试试SenseVoice Small大模型镜像
2026/1/19 0:44:02
在可执行程序中执行脚本语言通常称为“脚本引擎集成”。常见方式有:
// C/C++ 中集成 Lua#include<lua.h>#include<lualib.h>#include<lauxlib.h>intmain(){lua_State*L=luaL_newstate();luaL_openlibs(L);// 执行脚本文件if(luaL_dofile(L,"script.lua")){printf("Error: %s\n",lua_tostring(L,-1));}// 执行代码字符串luaL_dostring(L,"print('Hello from Lua!')");lua_close(L);return0;}// C/C++ 中集成 Python#include<Python.h>intmain(){Py_Initialize();// 执行 Python 代码PyRun_SimpleString("print('Hello from Python!')\n");// 执行脚本文件FILE*fp=fopen("script.py","r");PyRun_SimpleFile(fp,"script.py");Py_Finalize();return0;}// C++ 集成 V8#include<v8.h>intmain(){v8::Isolate*isolate=v8::Isolate::New();{v8::HandleScopehandle_scope(isolate);v8::Local<v8::Context>context=v8::Context::New(isolate);v8::Context::Scopecontext_scope(context);// 执行 JavaScriptv8::Local<v8::String>source=v8::String::NewFromUtf8(isolate,"'Hello' + ' from JavaScript!'").ToLocalChecked();v8::Local<v8::Script>script=v8::Script::Compile(context,source).ToLocalChecked();v8::Local<v8::Value>result=script->Run(context).ToLocalChecked();}isolate->Dispose();return0;}#include<quickjs.h>intmain(){JSRuntime*rt=JS_NewRuntime();JSContext*ctx=JS_NewContext(rt);// 执行 JavaScriptconstchar*code="print('Hello from QuickJS!')";JSValue result=JS_Eval(ctx,code,strlen(code),"<eval>",JS_EVAL_TYPE_GLOBAL);JS_FreeContext(ctx);JS_FreeRuntime(rt);return0;}#include<tcl.h>intmain(){Tcl_Interp*interp=Tcl_CreateInterp();Tcl_Init(interp);// 执行 Tcl 脚本Tcl_Eval(interp,"puts \"Hello from Tcl!\"");Tcl_DeleteInterp(interp);return0;}// 宿主函数inthost_add(lua_State*L){inta=luaL_checkinteger(L,1);intb=luaL_checkinteger(L,2);lua_pushinteger(L,a+b);return1;// 返回值数量}intmain(){lua_State*L=luaL_newstate();// 注册函数到全局表lua_register(L,"add",host_add);// 脚本中可以调用 add(10, 20)luaL_dostring(L,"print('Result:', add(10, 20))");lua_close(L);return0;}#include<chaiscript/chaiscript.hpp>intmain(){chaiscript::ChaiScript chai;// 自动暴露所有可用函数chai.add(chaiscript::fun(&my_function),"my_function");// 执行脚本chai.eval_file("script.chai");return0;}# Python 脚本调用宿主函数importctypes# 加载宿主 DLL/SOhost_lib=ctypes.CDLL('./host_lib.so')# 调用宿主函数result=host_lib.host_function(42)// 简单的插件系统示例classScriptEngine{public:virtualvoidExecute(conststd::string&script)=0;virtualvoidRegisterFunction(conststd::string&name,void*func)=0;};// Lua 实现classLuaEngine:publicScriptEngine{lua_State*L;public:LuaEngine(){L=luaL_newstate();luaL_openlibs(L);}~LuaEngine(){lua_close(L);}voidExecute(conststd::string&script)override{luaL_dostring(L,script.c_str());}voidRegisterFunction(conststd::string&name,void*func)override{lua_register(L,name.c_str(),(lua_CFunction)func);}};选择哪种方案取决于:
Lua 通常是游戏和嵌入式系统的首选,Python 适合需要丰富库支持的应用,JavaScript 适合 Web 技术栈的集成。