交叉编译luaposix记录

时间:2024-05-30 22:51:57

lua 不熟,但项目需求,需要luaposix支持。

以下记录交叉编译过程

源码下载地址:https://github.com/luaposix/luaposix/  

我选择最新版本v34.0.4。下载了luaposix-master.zip

交叉编译luaposix记录

 

unzip luaposix-master.zip 解压后,查看源码README.md文件 找到编译方法,方法有二:

第一种使用luarocks install luaposix,指令 个人理解这个装个宿主机的貌似还挺方便的。需要先安装luarocks ubuntu的系统apt install luarocks很方便。安装后执行报错,我也不太需要宿主机的直接就放弃了。

第二种使用build-aux/luke指令,先默认在luaposix-master路径下执行,报错如下

[[email protected] luaposix-master]# ./build-aux/luke
creating lib/posix/version.lua
creating build-aux/config.ld
cc -O2 -shared -fPIC   -D_POSIX_C_SOURCE=200809L -DPACKAGE='"luaposix"' -DVERSION='"yueyc"' -D_FORTIFY_SOURCE=2 -DHAVE_POSIX_FADVISE -D_XOPEN_SOURCE=700 -DNDEBUG -Iext/include -I/usr/include/lua5.1 ext/posix/fcntl.c -o linux/posix/fcntl.so 
In file included from ext/posix/fcntl.c:21:
ext/include/_helpers.c:59:17: error: lua.h: No such file or directory
ext/include/_helpers.c:60:20: error: lualib.h: No such file or directory
ext/include/_helpers.c:61:21: error: lauxlib.h: No such file or directory

需要修改cc 需要指定环境中的lua头文件等,还需要查找install的相关书写规范。

打开build-aux/luke,查找 CC  CFLAGS,安装路径PREFIX,及执行安装动作的方法。

make的书写规范如下,CFLAGS下有我交叉编译lua后,安装的头文件。

./build-aux/luke CC=arm-hisiv400-linux-gcc PREFIX=./install CFLAGS=-I../build/include 

执行指令有个哭笑不得的报错,说找不到luaxlib.h报错如下

[[email protected] luaposix-master]# ./build-aux/luke CC=arm-hisiv400-linux-gcc PREFIX=./out CFLAGS=-I../build/include 
creating lib/posix/version.lua
creating build-aux/config.ld
arm-hisiv400-linux-gcc -I../build/include -shared -fPIC   -D_POSIX_C_SOURCE=200809L -DPACKAGE='"luaposix"' -DVERSION='"yueyc"' -D_FORTIFY_SOURCE=2 -DHAVE_POSIX_FADVISE -D_XOPEN_SOURCE=700 -DNDEBUG -Iext/include -I/usr/include/lua5.1 ext/posix/fcntl.c -o linux/posix/fcntl.so 
In file included from /opt/hisi-linux/x86-arm/arm-hisiv400-linux/target/usr/include/errno.h:28:0,
                 from ext/include/_helpers.c:37,
                 from ext/posix/fcntl.c:21:
/opt/hisi-linux/x86-arm/arm-hisiv400-linux/target/usr/include/features.h:330:4: warning: #warning _FORTIFY_SOURCE requires compiling with optimization (-O) [-Wcpp]
 #  warning _FORTIFY_SOURCE requires compiling with optimization (-O)
    ^
In file included from ext/posix/fcntl.c:21:0:
ext/include/_helpers.c:61:21: fatal error: luaxlib.h: No such file or directory
 #include "luaxlib.h"
                     ^
compilation terminated.

find 指令还真没有找到luaxlib.h文件,莫非我交叉编译安装了一个假lua。原来是个李鬼问题。在lua安装路径下找到了lauxlib.h。

修改luaposix-master/ext/include/_helpers.c:61:21   #include "luaxlib.h"为 #include "lauxlib.h",这真看不出是

lua的作者马虎了,还是gvvaughan太任性

重复luke指令行。

编译通过。

./build-aux/luke CC=arm-hisiv400-linux-gcc PREFIX=./install CFLAGS=-I../build/include install

安装完成。过程还算很顺利,就是不知道能不能用。