我想用lua支持构建一个tshark 1.10.7 x86的精简版本。
我目前使用的选项是:
/configure --disable-wireshark --disable-packet-editor --disable-editcap --disable-mergecap --disable-reordercap --disable-text2pcap --disable-dftest --disable-randpkt --disable-airpcap --disable-dumpcap --disable-rawshark --disable-ipv6 --with-gnutls=no --with-gcrypt=no --disable-glibtest --with-lua=/usr/local/lib/
测试的不同方法:
--with-lua=/usr/local
--with-lua=/usr/local/src/lua-5.2.3
--disable-usr-local (just in case i did miss some lua header file somewhere)
当我设置'--with-lua = no'时,它构建得很好并且以前就是这样使用的。
以下是来自上述命令的错误日志:
checking whether to use liblua for the Lua scripting plugin... yes
checking Lua version... Lua 5.2
checking lua.h usability... yes
checking lua.h presence... yes
checking for lua.h... yes
checking lualib.h usability... yes
checking lualib.h presence... yes
checking for lualib.h... yes
checking lauxlib.h usability... yes
checking lauxlib.h presence... yes
checking for lauxlib.h... yes
checking for luaL_openlibs in -llua... no
checking for luaL_openlibs in -llua5.2... no
configure: error: Linking with liblua failed.
我确实从sorce lua.org安装了lua 5.2.3
由于slackware似乎需要再次连接readline libncurses,我已经使用lua 5.2.3完成了相同的编译。
make linux MYLIBS=-lncurses
Lua似乎至少指出了正确的版本:
# lua -v
Lua 5.2.3 Copyright (C) 1994-2013 Lua.org, PUC-Rio
这是我的lua文件位置:
bash-4.1# find /usr/local/include/ -iname "lu*"
/usr/local/include/lualib.h
/usr/local/include/lua.hpp
/usr/local/include/lua.h
/usr/local/include/luaconf.h
bash-4.1# find /usr/local/bin/ -iname "lu*"
/usr/local/bin/luac
/usr/local/bin/lua
bash-4.1# ls /usr/local/lib/liblua*
/usr/local/lib/liblua.a
安装本身是从/usr/local/src/lua-5.2.3 /
完成的我尝试了不同的附件,我检查了头文件,再次删除lua,重新安装slackware 13.37,但它似乎仍然以相同的值失败。
Google只向我展示了一些与我的问题不符的链接。 ask.wireshark lua的可能相关链接 没有解决问题,因为它可能是一个构建错误。
不同的搜索字符串似乎主要链接到缺少头文件,lua丢失或readline问题的问题,我认为我已经排除了这些问题。
根据评论,我做了一些进一步的理由(尚未完成)
config.log的输出清楚地显示了lualib.h lua.h。
以下是我认为的相关部分:
configure:31529: checking for luaL_openlibs in -llua
configure:31554: gcc -o conftest -g -O2 -Wall -W -Wextra -Wdeclaration-after-statement -Wendif-labels -Wpointer-arith -Wno-pointer-sign -Warray-bounds -Wcast-align -Wformat-security -Wold-style-definition -Wstrict-prototypes -Wjump-misses-init -Wvla -Waddress -Warray-bounds -Wattributes -Wdiv-by-zero -Wignored-qualifiers -Wpragmas -Wno-overlength-strings -Wwrite-strings -Wno-long-long -Wc++-compat -Wshadow -Wlogical-op -fexcess-precision=fast -fvisibility=hidden -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -DG_DISABLE_SINGLE_INCLUDES -D_FORTIFY_SOURCE=0 -I/usr/local/include -I/usr/include -I/usr/local/lib//include -Wl,--as-needed -L/usr/local/lib -L/usr/local/lib//lib conftest.c -llua -lz -L/usr/local/lib//lib -llua -lm -lm >&5
conftest.c:63:1: warning: function declaration isn't a prototype
conftest.c:65:1: warning: function declaration isn't a prototype
conftest.c: In function 'main':
conftest.c:65:1: warning: old-style function definition
/usr/local/lib/liblua.a(loadlib.o): In function `ll_loadfunc':
loadlib.c:(.text+0x7f7): undefined reference to `dlsym'
loadlib.c:(.text+0x857): undefined reference to `dlopen'
loadlib.c:(.text+0x8d1): undefined reference to `dlerror'
loadlib.c:(.text+0x901): undefined reference to `dlerror'
/usr/local/lib/liblua.a(loadlib.o): In function `gctm':
loadlib.c:(.text+0xb78): undefined reference to `dlclose'
collect2: ld returned 1 exit status
configure:31554: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "wireshark"
| #define PACKAGE_TARNAME "wireshark"
| #define PACKAGE_VERSION "1.10.7"
| #define PACKAGE_STRING "wireshark 1.10.7"
| #define PACKAGE_BUGREPORT "http://bugs.wireshark.org/"
| #define PACKAGE_URL "http://www.wireshark.org/"
| #define PACKAGE "wireshark"
| #define VERSION "1.10.7"
| #define VERSION_MAJOR 1
| #define VERSION_MINOR 10
| #define VERSION_MICRO 7
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define YYTEXT_POINTER 1
| #define HTML_VIEWER "mozilla"
| #define _FILE_OFFSET_BITS 64
| #define HAVE_NL80211 1
| #define HAVE_NL80211_CMD_SET_CHANNEL 1
| #define _U_ __attribute__((unused))
| #define DATAFILE_DIR "/usr/local/share/wireshark"
| #define DOC_DIR "/usr/local/share/doc/wireshark"
| #define HAVE_GLIB_PRINTF_GROUPING 1
| #define HAVE_LIBPCAP 1
| #define HAVE_PCAP_OPEN_DEAD 1
| #define HAVE_PCAP_FREECODE 1
| #define HAVE_PCAP_BREAKLOOP 1
| #define HAVE_PCAP_FINDALLDEVS 1
| #define HAVE_PCAP_DATALINK_VAL_TO_NAME 1
| #define HAVE_PCAP_DATALINK_NAME_TO_VAL 1
| #define HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION 1
| #define HAVE_PCAP_LIST_DATALINKS 1
| #define HAVE_PCAP_SET_DATALINK 1
| #define HAVE_PCAP_LIB_VERSION 1
| #define HAVE_PCAP_GET_SELECTABLE_FD 1
| #define HAVE_PCAP_FREE_DATALINKS 1
| #define HAVE_PCAP_CREATE 1
| #define HAVE_BPF_IMAGE 1
| #define PCAP_NG_DEFAULT 1
| #define HAVE_LIBZ 1
| #define HAVE_INFLATEPRIME 1
| #define HAVE_LUA_H 1
| #define HAVE_LUALIB_H 1
| #define HAVE_LAUXLIB_H 1
| /* end confdefs.h. */
|
| /* Override any GCC internal prototype to avoid an error.
| Use char because int might match the return type of a GCC
| builtin and then its argument prototype would still apply. */
| #ifdef __cplusplus
| extern "C"
| #endif
| char luaL_openlibs ();
| int
| main ()
| {
| return luaL_openlibs ();
| ;
| return 0;
| }
configure:31563: result: no
我现在将阅读更多内容以了解警告并修复它们。
答案 0 :(得分:0)
在sifflejoe的帮助下,我能够追踪libdl检测确实不能完全起作用。
LDFLAGS="-ldl" ./configure --disable-wireshark --disable-packet-editor --disable-editcap --disable-mergecap --disable-reordercap --disable-text2pcap --disable-dftest --disable-randpkt --disable-airpcap --disable-dumpcap --disable-rawshark --disable-ipv6 --with-gnutls=no --with-gcrypt=no --disable-glibtest --with-lua=/usr/local/lib/
确实为我们解决了这个问题。