lua 不熟,但项目需求,需要luaposix支持。
以下记录交叉编译过程
源码下载地址:https://github.com/luaposix/luaposix/
我选择最新版本v34.0.4。下载了luaposix-master.zip
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
安装完成。过程还算很顺利,就是不知道能不能用。