LuaJit交叉编译移植到ARM Linux

这篇具有很好参考价值的文章主要介绍了LuaJit交叉编译移植到ARM Linux。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简述

Lua与LuaJit的主要区别在于LuaJIT是基于JIT(Just-In-Time)技术开发的,可以实现动态编译和执行代码,从而提高了程序的运行效率。而Lua是基于解释器技术开发的,不能像LuaJIT那样进行代码的即时编译和执行。因此,在运行速度方面,LuaJIT要比Lua快得多。此外,LuaJIT还支持更多的操作系统和处理器架构,具有更广泛的适用性。但是,由于它引入了JIT技术,其实现复杂度更高,而且在一些特殊情况下,可能会存在性能问题。

这里选择LuaJit在嵌入式Linux系统使用,LuaJit交叉编译也比较简单,没有第三方库的依赖,直接交叉编译源码即可。

LuaJit移植-交叉编译

源码下载

LuaJit的官网:https://luajit.org/ ,发现官网上的链接好像下载不下来了,我把我这边用的源码上传到了码云,可以从这里下载:
https://gitee.com/fensnote/demo_code/blob/master/opensource/luajit/LuaJIT-2.0.5.tar.gz。

有个LuaJit开发文档博客做的不错,可以参考下:
luajit开发文档中文版(二)LuaJIT扩展 - zh7314 - 博客园

交叉编译

源码下载后,解压:

tar xvzf LuaJit-2.0.5.tar.gz

上面那个博客中有详细的安装编译说明,这里主要引用了其ARM交叉编译的部分:

基于 GNU Makefile 的构建系统允许在任何主机上为任何受支持的目标进行交叉编译,只要两种架构具有相同的指针大小。如果您想在 x64 操作系统上交叉编译到任何 32 位目标,您需要安装 multilib 开发包(例如 Debian/Ubuntu 上的 libc6-dev-i386)并构建 32 位主机部分(HOST_CC=“gcc - m32” )。

每当主机操作系统和目标操作系统不同时,您都需要指定TARGET_SYS,否则会出现汇编程序或链接器错误。例如,如果您在 Windows 或 macOS 主机上为嵌入式 Linux 或 Android 进行编译,则需要将TARGET_SYS=Linux添加到下面的示例中。对于最小的目标操作系统,您可能需要禁用src/Makefile中的内置分配器 并使用TARGET_SYS=Other。不要忘记为安装步骤指定相同的TARGET_SYS。

# Cross-compile to a 32 bit binary on a multilib x64 OS
make CC="gcc -m32"

# Cross-compile on Debian/Ubuntu for Windows (mingw32 package)
make HOST_CC="gcc -m32" CROSS=i586-mingw32msvc- TARGET_SYS=Windows
CROSS前缀允许指定标准 的GNU 交叉编译工具链(Binutils、GCC 和匹配的 libc)。前缀可能会因构建工具链 的--target不同而有所不同(注意CROSS前缀后面有一个"-")。下面的示例使用适用于 Linux 的规范工具链三元组。

由于在运行时通常没有简单的方法来检测 CPU 功能,因此使用正确的 CPU 或架构设置进行编译非常重要。您可以在自己构建工具链时指定这些。或将 -mcpu=...或-march=...添加到TARGET_CFLAGS。对于 ARM,拥有正确的-mfloat-abi=...设置也很重要。否则 LuaJIT 可能无法以目标 CPU 的全部性能运行。

# ARM soft-float
make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabi- \
     TARGET_CFLAGS="-mfloat-abi=soft"

# ARM soft-float ABI with VFP (example for Cortex-A8)
make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabi- \
     TARGET_CFLAGS="-mcpu=cortex-a8 -mfloat-abi=softfp"

# ARM hard-float ABI with VFP (armhf, requires recent toolchain)
make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabihf-

# PPC
make HOST_CC="gcc -m32" CROSS=powerpc-linux-gnu-
# PPC/e500v2 (fast interpreter only)
make HOST_CC="gcc -m32" CROSS=powerpc-e500v2-linux-gnuspe-

# MIPS big-endian
make HOST_CC="gcc -m32" CROSS=mips-linux-
# MIPS little-endian
make HOST_CC="gcc -m32" CROSS=mipsel-linux-

编译还是挺顺利的,我这边编译了两种处理器的版本,没有出现什么错误。
编译好之后,可以修改Makefile里的安装目录:
LuaJit交叉编译移植到ARM Linux,嵌入式linux笔记,Lua,arm开发,linux,LuaJit
修改为指定的安装目录,然后执行安装命令:make install
安装目录下的文件结构:
LuaJit交叉编译移植到ARM Linux,嵌入式linux笔记,Lua,arm开发,linux,LuaJit
我们只需要把bin、lib下载到板子里,我这边是放在了/usr/local/下面。
这时就以执行luajit命令来测试下:

$luajit
LuaJIT 2.0.5 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/
JIT: ON CMOV SSE2 SSE3 SSE4.1 fold cse dce fwd dse narrow loop abc sink fuse
> print("hello luajit!")
hello luajit!
>

然后我们在编译个json的扩展库,json在实际开发中用的比较多,这里可以下载一个lua-cjson库进行交叉编译一下,源文件也在上面的码云链接里下载。

解压编译,cjson编译也比较简单,只需要改下编译器,修改一下lua头文件的路径,头文件路径即刚才安装LuaJit时的目录里的include。修改如下:
LuaJit交叉编译移植到ARM Linux,嵌入式linux笔记,Lua,arm开发,linux,LuaJit
然后编译即可:

make CC=arm-none-linux-gcc 
arm-none-linux-gcc -c -O3 -Wall -pedantic -DNDEBUG  -I../install/include/luajit-2.0/ -fpic -o lua_cjson.o lua_cjson.c
arm-none-linux-gcc -c -O3 -Wall -pedantic -DNDEBUG  -I../install/include/luajit-2.0/ -fpic -o strbuf.o strbuf.c
arm-none-linux-gcc -c -O3 -Wall -pedantic -DNDEBUG  -I../install/include/luajit-2.0/ -fpic -o fpconv.o fpconv.c
arm-none-linux-gcc  -shared -o cjson.so lua_cjson.o strbuf.o fpconv.o

文件比较少,编译完成后生成cjson.so,这个和平时Linux的动态库名字规则不太一样,前面不用“lib”开头。

然后这个cjson.so下载到: /usr/local/lib/lua/5.1
这样就完成了。

测试

测试下json的使用:

local cjson = require("cjson")

local json_str = '{"name":"John", "age":30, "city":"郑州"}'
local json_tab = cjson.decode(json_str)

print(json_tab.name)  -- 输出 "John"
print(json_tab.age)   -- 输出 30
print(json_tab.city)  -- 输出 "郑州"

运行:

luajit test_cjson.lua
输出:
John
30
郑州

另外使用lua的table可以很方便的与json互转。文章来源地址https://www.toymoban.com/news/detail-742696.html

到了这里,关于LuaJit交叉编译移植到ARM Linux的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ubuntu交叉编译Opencv-4.2及contrib库并移植ARM开发板

             前言:本文介绍在ubuntu-18.04上交叉编译Opencv-4.2.0,交叉编译工具版本是arm-linux-4.9.0。 安装cmake和cmake-gui: $ sudo apt-get install cmake $ sudo apt-get install cmake-qt-gui 安装依赖库: $ sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libtiff5-dev libswscale-

    2024年02月14日
    浏览(49)
  • QT学习笔记-oracle oci数据库驱动交叉编译并移植到ARM开发板

    在上一文《QT学习笔记-QT安装oracle oci驱动》中介绍了在Windows环境下使用QT访问oracle数据库时遇到驱动无法加载问题的解决办法,大体思路是对QT源码中数据库驱动的源码oci进行编译,要想通过编译需要依赖对应数据库的头文件和库(可以通过下载oracle instant client),编译通过

    2024年02月13日
    浏览(55)
  • 嵌入式Linux Qt交叉编译环境搭建

    TinkerBoard2主板,BuildRoot根文件系统,package自带的Qt版本为5.14.2,所以安装的版本也是5.14.2 安装的组件看个人需求,我都要了 默认安装路径/opt/Qt5.14.2/ 源码路径/opt/Qt5.14.2/5.14.2/Src/ 安装后选定的打包工具路径/opt/Qt5.14.2/5.14.2/(我的默认有gcc_64和android) 这种方法容易导致version `G

    2024年01月25日
    浏览(44)
  • 基于嵌入式linux的OpenSSL源码移植(基于arm64)

    SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。

    2024年02月11日
    浏览(64)
  • Linux——ARM交叉编译环境搭建

    可依据自己当前的环境进行选择下载,官网如下​​​ Downloads | GNU-A Downloads – Arm Developer 我这边选择如下,用于4412开发板的 gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz mkdir  /usr/local/arm tar -xvf gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz 在 vim /root/.bashrc 或 vim /etc/profi

    2024年02月21日
    浏览(49)
  • ARM_Linux的交叉开发以及交叉编译器

    目录 为什么要使用交叉开发 为什么要使用交叉编译 交叉编译器的安装 交叉编译器的使用 交叉开发是指在通用的电脑上吧程序编写,编译,调试好,再下载到嵌入式产品中去运行,对于一些简单的程序的话,直接在电脑上编译调试好即可,但是对于一些需要操作硬件的开发

    2024年01月23日
    浏览(47)
  • 【交叉编译环境】安装arm-linux交叉编译环境到虚拟机教程(简洁版本)

    就是看到了好些教程有些繁琐,我就写了一个 我这个解压安装的交叉编译环境是Linaro GCC的一个版本,可以用于在x86_64的主机上编译arm-linux-gnueabihf的目标代码 步骤来了 在你的Ubuntu系统中 创建一个目录 ,例如/usr/local/arm,然后将下载好的gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueab

    2024年02月03日
    浏览(38)
  • 使用CMake交叉编译Arm Linux程序

    注意,工具链文件的指定一定要紧跟cmake命令之后,不能放到 … 后面构建arm架构cmake 工程里新建一个文件叫arm_linux_setup.cmake arm_linux_setup.cmake内容如下

    2024年02月03日
    浏览(52)
  • ARM & Linux 基础学习 / 配置交叉编译工具链 / 编译 Linux 应用和驱动 / 编译内核

    编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料(如 百问网的《嵌入式Linux应用开发完全手册》,在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO:开发板资料》或《2.2 全系列Linux教程:在线视频与配套资料》里面可以下载到),还有参考 菜

    2024年02月04日
    浏览(47)
  • 基于Linux平台交叉编译 flutter arm64应用

        操作系统ubuntu 20.04,开发工具Android Studio + Flutter,运行平台RK3566 Linux。截止现在Flutter官方尚未正式对Linux arm64进行支持,仅有flutter-elinux可用。开发环境的搭建过程遇到了很多的坑,幸运的是最终完成了。为避免后来者再次浪费时间,特撰此文以飨读者。     本文仅记

    2024年02月06日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包