歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 編譯lua5.3.2報錯提示libreadline.so存在未定義的引用解決方法

編譯lua5.3.2報錯提示libreadline.so存在未定義的引用解決方法

日期:2017/3/1 9:17:59   编辑:Linux編程

從官網上下載5.3.2的源碼後,make linux進行編譯,提示報錯:

gcc -std=gnu99 -o lua lua.o liblua.a -lm -Wl,-E -ldl -lreadline
/usr/local/lib/libreadline.so:對‘tputs’未定義的引用
/usr/local/lib/libreadline.so:對‘tgoto’未定義的引用
/usr/local/lib/libreadline.so:對‘tgetflag’未定義的引用
/usr/local/lib/libreadline.so:對‘UP’未定義的引用
/usr/local/lib/libreadline.so:對‘tgetent’未定義的引用
/usr/local/lib/libreadline.so:對‘tgetnum’未定義的引用
/usr/local/lib/libreadline.so:對‘PC’未定義的引用
/usr/local/lib/libreadline.so:對‘tgetstr’未定義的引用
/usr/local/lib/libreadline.so:對‘BC’未定義的引用
collect2: error: ld returned 1 exit status
Makefile:63: recipe for target 'lua' failed
make[2]: *** [lua] Error 1
make[2]: Leaving directory '/home/abuu/project/lua-5.3.2/src'
Makefile:110: recipe for target 'linux' failed
make[1]: *** [linux] Error 2
make[1]: Leaving directory '/home/abuu/project/lua-5.3.2/src'
Makefile:55: recipe for target 'linux' failed
make: *** [linux] Error 2

報錯原因是無法從libreadline.so庫中定位tputs、tgoto等函數位置,那這些函數可能是由其他共享庫所引入。
上網查詢一下這些函數,發現這些函數來源於ncurses,於是從官網上下載ncurses源碼進行編譯。
安裝完ncurses後再次"make linux"試了試,依然報錯,於是檢查、添加依賴,在src/Makefile中修改如下:

linux:
$(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline -lncurses"

保存後再次編譯,通過。

Lua 語言 15 分鐘快速入門 http://www.linuxidc.com/Linux/2013-06/86582.htm

Lua程序設計(第2版)中文 PDF http://www.linuxidc.com/Linux/2013-03/81833.htm

Lua程序設計(第二版)閱讀筆記 http://www.linuxidc.com/Linux/2013-03/81834.htm

NetBSD 將支持用 Lua 腳本開發內核組件 http://www.linuxidc.com/Linux/2013-02/79527.htm

CentOS 編譯安裝 Lua LuaSocket http://www.linuxidc.com/Linux/2011-08/41105.htm

Programming In Lua 高清PDF中文版 http://www.linuxidc.com/Linux/2015-05/117362.htm

如何配置一套優雅的Lua開發環境 http://www.linuxidc.com/Linux/2015-10/124397.htm

Lua 的詳細介紹:請點這裡
Lua 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved