在開發嵌入式項目時,由於嵌入式平臺沒有lua環境,只能自己移植。先到官網上下載最新的lua源碼(點擊打開鏈接)。
接下來按照下面步驟:
1、修改src/Makefile文件內容:
源碼包中的原始的Makefile的部分需要更改的內容如下:
# Your platform. See PLATS for possible values.
PLAT= none
CC= gcc -std=gnu99
CFLAGS= -O2 -Wall -Wextra -DLUA_COMPAT_5_2 $(SYSCFLAGS) $(MYCFLAGS)
LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS)
LIBS= -lm $(SYSLIBS) $(MYLIBS)
AR= ar rcu
RANLIB= ranlib
RM= rm -f
SYSCFLAGS=
SYSLDFLAGS=
更改後的內容如下:
# Your platform. See PLATS for possible values.
PLAT= linux
CC=arm-oe-linux-gnueabi-gcc -std=gnu99 -march=armv7-a -mfloat-abi=softfp -mfpu=neon --sysroot=$(SDKTARGETSYSROOT)
CFLAGS= -O2 -Wall -Wextra -DLUA_COMPAT_5_2 $(SYSCFLAGS) $(MYCFLAGS)
LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS)
LIBS= -lm $(SYSLIBS) $(MYLIBS)
AR= arm-oe-linux-gnueabi-ar rcu
RANLIB= arm-oe-linux-gnueabi-ranlib
RM= rm -f
SYSCFLAGS= -fexpensive-optimizations -frename-registers -fomit-frame-pointer -ftree-vectorize -Wno-error=maybe-uninitialized -finline-functions -finline-limit=64 -include quectel-features-config.h -fstack-protector-strong -pie -fpie -Wa,--noexecstack
SYSLDFLAGS= -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -Wl,-z,relro,-z,now,-z,noexecstack
修改下面的內容;
linux:
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline"
爲:
linux:
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl"
同時將luaconf.h文件的64行屏蔽。
2.修改頂層目錄的Makefile文件
原始的文件部分內容如下:
# Your platform. See PLATS for possible values.
PLAT= none
# Where to install. The installation starts in the src and doc directories,
# so take care if INSTALL_TOP is not an absolute path. See the local target.
# You may want to make INSTALL_LMOD and INSTALL_CMOD consistent with
# LUA_ROOT, LUA_LDIR, and LUA_CDIR in luaconf.h.
INSTALL_TOP= /usr/local
修改後的內容如下:
# Your platform. See PLATS for possible values.
PLAT= linux
# Where to install. The installation starts in the src and doc directories,
# so take care if INSTALL_TOP is not an absolute path. See the local target.
# You may want to make INSTALL_LMOD and INSTALL_CMOD consistent with
# LUA_ROOT, LUA_LDIR, and LUA_CDIR in luaconf.h.
INSTALL_TOP= 自己想要安裝的目錄
保存,make,make install
上述只能產生lua的靜態庫。如果要產生動態庫so,則按照下面步驟來:
1、在頂層的Makefile中的
TO_LIB= liblua.a
修改爲
TO_LIB= liblua.a liblua.so
2、在/src/Makefile中的如下兩行之間:
ALL_A= $(LUA_A)
# Targets start here.
添加如下選項
LUA_SO=liblua.so
ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
$(LUA_SO): $(CORE_O) $(LIB_O)
$(CC) -o $@ -shared -fPIC $? -ldl -lm