编译lua(非Rose内置时)

一、ubuntu

1.1 编译、安装lua

安装的是lua开发包,不是单lua那个app。

  1. 从官网下载lua-5.3.6.tar.gz,解压缩。
  2. 编辑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"
  3. cd lua-5.3.6。在终端,进入lua-5.3.6目录。
  4. make CFLAGS=-fPIC linux。成功后在cd lua-5.3.6下会有liblua.a。为什么要加“-fPIC”,见下面的“-fPIC”
  5. 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。

全部评论: 0

    写评论: