c/c++ 与 lua 之搭建环境

这几天因项目需要,又把c/c++搬出来用了一遍(已经以.net为主了),用qt(也是现学滴)开发了一套应用程序管理框架,其中,涉及需要灵活更新对被管理的应用程序的控制的功能,思考了一下,应当找一套适合c/c++调用的脚本语言来完成,python、javascript等等我还会点点,后来发现lua也可以(我喜欢玩魔兽),好了,就它了,继续现学现用,嘿嘿。

先撸完了语法,能够写几个lua脚本了,接下来就是如何嵌入c/c++程序中调用了。

工欲善其事必先利其器,我撸lua的时候用的vscode,想着就用vscode来搞吧,先建一个c/c++项目,结果一上来就碰了一鼻子灰,我用的微软的cl.exe,结果各种报错,不是头文件找不到,就是链接失败,各种度各种谷,发现大多数都是minGW的解决方案,好吧,那我先用vs搞好了,再来看vscode怎么搞吧。

先说说需要用到的环境吧(注意,我是在windows下开发):

lua源码,或者编译好的二进制程序 下载 

其中,include 文件夹里,就是到时需要引入的头文件的文件夹,lib里放置了静态库。我看了一下,官方提供的编译好的只有32位windows库,没有64位的,如果要64位的就需要自己编译。

接下来就是写一个c/c++控制台程序,试一试怎么调用lua了,感觉和v8引擎调用javascript差不多。

#include "stdafx.h"

 extern "C"
 {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
 }

int _tmain(int argc, _TCHAR* argv[])
{
	lua_State *L = luaL_newstate();

	lua_pushboolean(L, 1);
	lua_pushstring(L, "hello lua");

	int top = lua_gettop(L);
	printf("%d\n", top);

	lua_close(L);
	return 0;
}

因为我创建的是c++项目,所以在引入lua头文件的时候,要特别处理一下。

到此,网上大多数的文章也是这样写的,但是一旦编译,就会报找不到符号的错误,我不知道其他人是如何通过编译并运行起来的。按照我的经验,这就是差了静态库导致的,可是那个lua的lib文件夹下,并没有一个后缀是lib的文件,只有一个liblua.dll.a文件,这不是linux下的库文件么???

不管三七二十一,我引入了看看,嘿,还就跑起来了,你说搞不搞笑。

好了,既然vs可以跑起来,那vscode就应当没问题,这里不得不说IDE用多了,基础的编译链接命令到底怎么用,还真不是很了解。

先说说c_cpp_properties.json的配置

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "D:\\lua\\Binaries-LuaDist-batteries-0.9.8-Windows-x86\\include\\*"   <<< 注意这里
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.19041.0",
            "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-msvc-x64"
        },
    ],
    "version": 4
}

上述配置中,那个包含目录并不是用来给编译时查找头文件使用的,而是在写代码的时候,给智能提示使用的,所以不配置也可以。

然后重点就是preLaunchTask的那个task.json配置了

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "build exe",
			"command": "cl.exe",
			"args": [
				"/Zi",
				"/EHsc",
				"/nologo",
				"/Fe:",
				// "/MACHINE:X86",
				"${fileDirname}\\${fileBasenameNoExtension}.exe",
				"${file}",
				"/ID:\\lua\\Binaries-LuaDist-batteries-0.9.8-Windows-x86\\include",
				"/link",
				"/LIBPATH:D:\\lua\\Binaries-LuaDist-batteries-0.9.8-Windows-x86\\lib",
				"\"liblua.dll.a\"",
				// "/MACHINE:X64"
			],
			"options": {
				"cwd": "${fileDirname}"
			},
			"problemMatcher": [
				"$msCompile"
			],
			"group": {
                "kind": "build",
                "isDefault": true
            },
			"detail": "编译器: cl.exe"
		}
	]
}

以上配置是我在坚信vs可以的情况下慢慢试出来的,以上配置就是编译链接的过程,最终会转换成对cl.exe的调用,其中重点就是如何引入头文件以及依赖库,大家仔细看看,注意link相关的指令的放置位置,不要放到"/link"前面去了,否则就会被解释为编译指令,从而被忽略了。

温馨提示:如果用微软的cl.exe作为编译工具,那么需要通过Developer Command Prompt进入vscode。另外,按照C/C++ for Visual Studio Code插件官方提示,不建议把cl.exe放置到全局环境中,大家看看官方文档:Configure Visual Studio Code for Microsoft C++

好了,以上就是c/c++如何嵌入lua的环境搭建了,希望本文对你有帮助 ^_^

更新:

lua官网有提供64位的库,包括静态和动态的,具体下载为:下载

 

如果是windows下开发,则选那个windows libraires,进去后根据你的需要选静态或动态库。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值