Build tshark 1.10.7 не работает на luaL_openlibs

Я хочу построить урезанную версию tshark 1.10.7 x86 с поддержкой lua.

В настоящее время я использую следующие варианты:

/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 ****** 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 ****** failed.

Я установил lua 5.2.3 из sorce lua.org

Поскольку 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/*******
/usr/local/lib/******.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/******.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/******.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

теперь я прочитаю немного больше, чтобы понять предупреждения и исправить их.

1 ответ

С помощью 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/

решила проблему для нас.

licensed under cc by-sa 3.0 with attribution.