ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

arm-cortex A9调用lua 解释器

2020-06-02 10:07:32  阅读:329  来源: 互联网

标签:bin deprecated lua cortex linux A9 include arm


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 文件夹拷贝到开发板上

运行如下:
在这里插入图片描述

标签:bin,deprecated,lua,cortex,linux,A9,include,arm
来源: https://blog.csdn.net/hanmingjunv5/article/details/106447397

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有