arm-cortex A9调用lua 解释器
2020-06-04 07:51
99 查看
1.编译lua-3.3.5
下载lua源文件:
curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz
修改 src/Makefile
PLAT= none 改为: PLAT= linux
CC= gcc -std=gnu99 改为: CC= /opt/Xilinx/SDK/2018.3/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin/arm-linux-gnueabihf-gcc (根据实际交叉编译器位置,作相应更改)
AR= ar rcu 改为: AR= /opt/Xilinx/SDK/2018.3/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin/arm-linux-gnueabihf-ar rcu
RANLIB= ranlib 改为: RANLIB= /opt/Xilinx/SDK/2018.3/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin/arm-linux-gnueabihf-ranlib
linux: $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline" 改为: linux: $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl"
编译源码:
cd lua-5.3.5/src make 在src目录会生成 liblua.a:lua静态链接库 lua程序:lua解释器 luac程序:luac是将lua的程序文件编译成二进制文件的工具
2.使用lua静态库
配置QT交叉编译环境后,新建工程:lua_qttest.
.pro文件如下:
QT += core QT -= gui CONFIG += c++11 TARGET = lua_qttest CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp # The following define makes your compiler emit warnings if you use # any feature of Qt which as been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 unix:!macx: LIBS += -L$$PWD/lib/ -llua INCLUDEPATH += $$PWD/include DEPENDPATH += $$PWD/include HEADERS += \ include/lua.hpp LIBS += -ldl DESTDIR += $$PWD/bin #unix:!macx: PRE_TARGETDEPS += $$PWD/lib/liblua.a
qt编译会出现 [undefined reference to symbol ‘dlsym@@GLIBC_2.4’],在.pro中其中添加LIBS += -ldl
编写程序
main.cpp文件:
#include <QCoreApplication> #include <iostream> #include <stdio.h> #include <lua.hpp> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); printf("I am QT5.7\n"); lua_State *L; L = luaL_newstate(); if(L == NULL){ printf("luaL_newstate failed\n"); return a.exec(); } /*load Lua base libraries*/ luaL_openlibs(L); if(luaL_dofile(L,"bin/cal.lua")){ const char *error = lua_tostring(L, -1); std::cout << error <<std::endl; return false; } lua_close(L); printf("luaL_newstate OK\n"); return a.exec(); }
cal.lua:打印0-100之间的偶数
print("print even numbers between 0 to 100\n") for i = 0,100,1 do if i%2 == 0 then print(i,"\n") end end
3.开发板运行
将 bin include lib lua_qttest 文件夹拷贝到开发板上
运行如下:
相关文章推荐
- C调用Lua -- 简单的解释器程序实现
- Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本
- Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本
- Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本
- cocos2d-x Lua事件调用 新版本中Rect判断是否包含Point
- 扩展Redis的Lua调用方式
- VC6.0配置LUA编译环境及LUA调用C++函数的简单示例
- 在lua中调用C++
- js 解释器的尾调用优化机制 with 和 eval对性能的影响
- C调用lua脚本效率测试
- C/C++调用lua脚本函数
- lua调用java java调用lua[转载]
- Lua调用c#
- (转)LUA和C之间的函数调用
- 用SWIG实现C++和Lua互相调用实例
- ARM 过程调用标准[转]
- Lua中调用C++
- C++中使用Lua脚本 和lua中调用c的方法
- lua相互调用的内存释放问题
- C/C++ 调用 Lua (学习随笔)