linuxluawiresharktsharkslackware

build tshark 1.10.7 fails on luaL_openlibs


I want to build a stripped down version of tshark 1.10.7 x86 with lua support.

The options i currently use are those:

/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/

different approaches tested:

--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)

When i set '--with-lua=no' it builds fine and was previously used that way.

Here are the error logs from above command:

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.

i did install lua 5.2.3 from sorce lua.org

As slackware seems to need readline linked again libncurses i have done the same with lua 5.2.3 to have it compile correctly.

make linux MYLIBS=-lncurses

Lua seems to at least point out the correct version:

# lua -v
Lua 5.2.3  Copyright (C) 1994-2013 Lua.org, PUC-Rio

here are my lua files locations:

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

The installation itself was done from /usr/local/src/lua-5.2.3/

I tried different includedirs where i checked the header files are in, removing lua again, reinstalling slackware 13.37, but it seems to somehow still fail on the same value.

Google did only show me a few links which did not match my issue. The possible relevant link to ask.wireshark lua did not solve the issue as it might be a build bug.

Different search strings mostly seem to link to issues with a missing header file, lua missing, or readline issues, which i think i have ruled out already.

Based on the comments i did some further reason (which is not yet finished)

The output of the config.log clearly shows the lualib.h lua.h are there.

Here is the in my opinion relevant part:

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

i will now read a bit more to understand the warnings and fix them.


Solution

  • With the help of sifflejoe i was able to track down that the libdl detection did somehow not completely work.

    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/
    

    did solve the issue for us.