一、简单了解sol2

  • Sol2简介

    Sol是一个用于C+绑定Lua脚本的库,仅由头文件组成,方便集成,并提供了大量易用的API接口,可以便利地将Lua脚本与C+代码绑定起来,而不必去关心如何使用那些晦涩的Lua C API。正如其作者所言,Sol的目的就是提供极其简洁的API,并能高效到与C语言媲美,极大地来方便人们使用。

  • 编译条件

    Sol支持Lua的绝大多数版本,包括 5.1、5.2、5.3和LuaJit等,但由于代码中用到了许多C+11/14特性,因此编译时需要编译器支持C14标准甚至C+17标准

  • 安装方法

    去 https://github.com/ThePhD/sol2 下载一个sol.hpp , 然后放到 /usr/local/include 里即可,已经在100服务器上面部署好了环境,sol.hpp在/usr/local/include目录下。

  • 为什么强大

    只需要包含一个sol.hpp头文件即可(集成性很高,可能根据不同lua脚本需要一些简单的依赖)不需要任何其他的东西, 没有什么静态库/动态库之类的东西,也不需要像tolua++一样那么麻烦每个类都要写pkg文件。只需要稍微学习一下Sol2的导出API即可。

  • 使用方法

    在代码里面通过sol的接口把需要运行的 lua 脚本加载进去,生成对应的c+接口, 然后c的代码就可以直接调用这些lua生成的 c+ 接口,实现了c++直接调用 lua。接口导出是一个动态导出,如果有多个对象需要执行多个lua,则需要再全局变量中首先进行初始化,方便调用lua。

二、当前版本及配置

  • sol2版本和gcc版本:

    sol为当前最新版:Sol3 (sol2 v3.0)
    gcc版本:5.4.0
    (PS:需要支持C++14特性,sol中的很多代码都是根据c++14特性进行编写的,C++17不是必要条件)

  • 服务器及头文件存放路径:

    服务器为10.0.53.100,头文件存放路径为:/usr/local/include

  • 主要文件及作用:

    sol.hpp,对lua脚本的操作及使用。

  • 其它依赖文件及作用:

      依赖文件 作用
    1 forward.hpp 处理数字和一些特殊类型
    2 assert.hpp assert作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行
    3 tuple.hpp 增加lua_table和lua_value抽象
    4 lua_table.hpp 类似于tuple.hpp
    5 lua_value.hpp 完整全面的测试

    (PS:这些依赖文件需要根据sol调用lua脚本使用的一些方法去自行添加,不一定都要添加)
    (PS:这些依赖文件都可以在git中的include/sol中找到)

三、sol库的使用

  • 代码路径:

    测试用例后续会更新,暂时先把用例类型写一下

    测试用例 主要作用 需要调用的lua脚本
    easy.cpp sol对lua的简单调用 无,直接在c++中写lua语言
    variable_read.cpp sol读取lua脚本中的变量 variables.lua,里面简单存放了一个table
    variable_write.cpp sol向lua中写入变量 无,直接在c++中写lua脚本语言,也可以调用lua脚本
    register_c++.cpp c++函数通过sol注册到lua 无,直接在c++中写lua脚本语言,也可以调用lua脚本
    json_table.cpp json_str和table格式的相互转换 1.LuaJson.lua table和json_str格式转化模块 2.test.lua 对LuaJson.lua进行调用

    后续用例还会继续补充。

  • 执行方式:

    有一个可执行文件run.sh,如果需要执行的测试用例为XXX.cpp

    执行指令为: ./run.sh XXX.cpp

    执行完指令后,会生成可执行文件a.out,执行a.out可以查看执行结果。

  • 需要的库:

    之前发现sol不支持lua脚本中的require,会在编译完成运行的时候报 attempt to call global 'require' (a nil value),单独运行lua脚本却没有这个问题,可以正常调用。后研究发现,sol对lua的调用也存在一定的限制,比如说type,无法对其进行直接调用,需要在代码中补充sol的各种支持lua语言的库,比如最基础的base库。

    在sol调用lua的过程中,需要根据lua脚本中的代码,打开lua提供的各种库,下面是对一些库的简单介绍:

    简单介绍
    sol::lib::base 支持lua脚本中的一些基础函数,比如type,require
    sol::lib::string 支持lua脚本中的string函数操作
    sol::lib::package 支持lua脚本中的package函数,如制定lua脚本的路径
    sol::lib::table 支持lua脚本中的table的相关函数

    (PS:这些库都包含在sol::lib的枚举中,可以在一行代码指定多个库)

C++学习(五):SOL2库的使用相关推荐

  1. robot framework学习五——AutoltLibrary库

    安装中遇到的问题: 安装好了AutoItLibrary,但是导入到RIDE后,仍然红色显示 搜索了下解决办法,说要安装下autoit-v3-setup.exe https://www.autoitsc ...

  2. 目前最好用的大规模强化学习算法训练库是什么?

    点击蓝字  关注我们 本文整理自知乎问答,仅用于学术分享,著作权归作者所有.如有侵权,请联系后台作删文处理. 本文精选知乎问题"目前最好用的大规模强化学习算法训练库是什么?"评论区 ...

  3. 强化学习环境全库安装(从mujoco到spinningup)

    强化学习环境全库安装 从mujoco200到spinningup (上篇) 前言 一: 安装Mujoco200物理引擎 二. 创建conda虚拟环境 1:选择python版本 2.创建conda虚拟环 ...

  4. STM32 HAL库学习笔记1-HAL库简介

    STM32 HAL库学习笔记1-HAL库简介 HAL库 SPL 库 和 HAL 库两者相互独立,互不兼容.几种库的比较如下 目前几种库对不同芯片的支持情况如下 ST 中文官网上有一篇<关于ST库 ...

  5. 【jQuery】学习一下JS库——jQuery

    [jQuery]学习一下JS库--jQuery jQuery 一.jQuery对象 01. 基本概念,区分DOM对象和jQuery对象 02. 两个对象之间的转换 二.jQuery的使用方法 关于隐式 ...

  6. java分布式架构_Java学习五分钟系列:从单体架构转向分布式架构的难点

    Java学习五分钟系列,目的是为让大家在短时间内搞清楚一项技术的概念.优缺点和适用场景,想要深入的了解,还需要投入更多的时间. 分布式架构和单体应用架构相比,可以充分利用多机器的性能优势,提高了系统的 ...

  7. vivado 亚稳态_【vivado学习五】时序分析

    想一千次,不如去做一次.华丽的跌倒,胜过无谓的徘徊. [vivado学习五]时序分析 典型的时序模型由发起寄存器.组合逻辑和捕获寄存器3部分组成,如图1所示形成了三条时钟路径:原时钟路径(Source ...

  8. CUDA和cuDNN到底是啥关系?(cuDNN是基于CUDA的深度学习GPU加速库)

    1.什么是CUDA CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA是一种由NVIDIA推出的通用并行计算架构,该架构 ...

  9. C#多线程学习(五) 多线程的自动管理(定时器) (转载系列)——继续搜索引擎研究...

    Timer类:设置一个定时器,定时执行用户指定的函数.               定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数. 初始化一个Timer对象: Timer timer ...

最新文章

  1. eclipse字体大小设置_Java 设置Excel单元格格式—基于Spire.Cloud.SDK for Java
  2. 忘记虚拟机root密码的解决办法
  3. ORA-00257: archiver error. Connect internal only, until freed
  4. 第十二届蓝桥杯大赛软件赛省赛第二场 C/C++ 大学B组
  5. Web 标准实践系列(一)——Google 的首页
  6. ant build里如何指定classpath
  7. linux 音频驱动的流程,Intel平台下Linux音频驱动流程分析
  8. 数学知识在游戏中的运用
  9. CCIE理论-第八篇-SD-WAN(三)+DAI(动态ARP检测)
  10. 算法笔记:简单的字符串模式匹配-KMP算法(与BF算法对比时间复杂度)
  11. Trick(四)——翻转字符串的实现
  12. Mybatis中insert之后返回主键
  13. Java中FilterInputStream和FilterOutputStream的用法
  14. python操作adb详解_Python之使用adb shell命令启动应用的方法详解
  15. 解决Flutter运行IOS报错:Podfile is out of date
  16. [spring源码学习]一、IOC简介
  17. 选票统计 SDUT
  18. 试用分析一国宏观经济内外均衡的过程及其政策搭配
  19. 第十二章 软件壳(三)(动态加载型壳)
  20. 红米k30可以用鸿蒙系统吗,红米K30好用吗?Redmi K30上手评测

热门文章

  1. 使用智邦国际ERP系统添加生产预测单方法
  2. 计算机技术是信息化社会的,以计算机和通信技术为主的信息技术革命是社会信息化的动力源泉...
  3. ads1258_ads1158/ads1258调试总结
  4. linux安装mjpg-stream
  5. 混沌与秩序服务器无响应,混沌与秩序2无法连接服务器是什么原因
  6. BeagleBone开发(BBB)
  7. canvas student下载_Canvas Studentapp
  8. 向日葵android自动退出,向日葵手机端总是自动退出
  9. android拦截电话并且不留下通话记录,具透丨iOS 10 支持拦截骚扰电话了,这些事情你应该知道...
  10. Netty系列之Netty百万级推送服务设计要点