一、ubuntu
1.1 编译、安装lua
安装的是lua开发包,不是单lua那个app。
- 从官网下载lua-5.3.6.tar.gz,解压缩。
- 编辑lua-5.3.6/Makefile。为什么要加“-fPIC”,见下面的“-fPIC”
linux: $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline" 改为 linux: $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline -fPIC"
- cd lua-5.3.6。在终端,进入lua-5.3.6目录。
- make CFLAGS=-fPIC linux。成功后在cd lua-5.3.6下会有liblua.a。为什么要加“-fPIC”,见下面的“-fPIC”
- sudo make install。执行该命令后,lua头文件复制到/usr/local, 静态库文件liblua.a复制到/usr/local/lib
1.2 下载libreadline
error:readline/readline.h:no such file or directory
编译时报以上错误,原因是找不到libreadline,须下载。
sudo apt-get install libreadline-dev
1.3 -fPIC
若不加-fPIC,编译cartographer时会报以下错误。
/usr/bin/ld: /usr/local/lib/liblua.a(lstate.o): relocation R_X86_64_PC32 against symbol `lua_newstate' can not be used when making a shared object; recompile with -fPIC
更多细节参考:“LINUX下载编译lua”https://blog.csdn.net/quantum7/article/details/106175032
1.4 <cartographer>/cmake/modules/FindLuaGoogle.cmake
编译cartographer时报以下错误。
/usr/bin/ld: /usr/local/lib/liblua.a(loadlib.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
解决办法,在设置完LUA_LIBRARIES后,增加以下这变量,让强制覆盖由cmake“算”出的LUA_LIBRARIES。
set(LUA_LIBRARIES "/usr/local/lib/liblua.a;/usr/lib/x86_64-linux-gnu/libdl.so")
1.5 tmpnam
编译时报出以下警告。
liblua.a(loslib.o):在函数‘os_tmpname’中: loslib.c:(.text+0x177): 警告: the use of `tmpnam' is dangerous, better use `mkstemp'
原因是tmpnam这api存在安全性隐患。去除这警告方法,把loslib.c中的tmpnam替换为mkstemp。