tcpdump mailing list archives
build failures on Solaris
From: Denis Ovsienko via tcpdump-workers <tcpdump-workers () lists tcpdump org>
Date: Sat, 31 Jul 2021 11:37:52 +0100
--- Begin Message --- From: Denis Ovsienko <denis () ovsienko info>
Date: Sat, 31 Jul 2021 11:37:52 +0100
On Sat, 24 Jul 2021 00:11:27 +0100 Denis Ovsienko via tcpdump-workers <tcpdump-workers () lists tcpdump org> wrote:There are more related corner cases of varying severity, some of which I might have time to describe later.So, as promised... Several warnings are now documented in the build scripts (look for TCPSLICE_TAINTED=yes and TCPDUMP_TAINTED=yes). Another problem that is briefly mentioned in a comment is tcpdump build issues on Solaris specific to CMake and system libpcap. Hopefully my notes have captured the details right. ##### Solaris 10 with Sun C ##### The pre-compile libpcap feature test programs link with the system libpcap.so fine and run fine. The tcpdump binary links fine, but fails to run: $ /tmp/tcpdump_build_matrix.XXtwaqbh/bin/tcpdump --version ld.so.1: tcpdump: fatal: libpcap.so.1: open failed: No such file or directory $ ldd /tmp/tcpdump_build_matrix.XXyKaiEo/bin/tcpdump libpcap.so.1 => (file not found) libsocket.so.1 => /lib/libsocket.so.1 libnsl.so.1 => /lib/libnsl.so.1 libsmi.so.2 => (file not found) libc.so.1 => /lib/libc.so.1 libmp.so.2 => /lib/libmp.so.2 libmd.so.1 => /lib/libmd.so.1 libscf.so.1 => /lib/libscf.so.1 libdoor.so.1 => /lib/libdoor.so.1 libuutil.so.1 => /lib/libuutil.so.1 libgen.so.1 => /lib/libgen.so.1 libm.so.2 => /lib/libm.so.2 /platform/SUNW,SPARC-Enterprise-T5220/lib/libc_psr.so.1 /platform/SUNW,SPARC-Enterprise-T5220/lib/libmd_psr.so.1 $ pcap-config --libs -L/opt/csw/lib -R/opt/csw/lib -lpcap It looks like the test programs use the runpath, but tcpdump does not. ##### Solaris 11 with GCC ##### This is the opposite: the pre-compile libpcap feature test programs fail to link so all libpcap feature tests fail. However, libpcap is detected as available and the build process resorts to missing/ and produces a binary of tcpdump that is mostly functional: $ /tmp/tcpdump_build_matrix.XX06MD.a/bin/tcpdump -D /tmp/tcpdump_build_matrix.XX06MD.a/bin/tcpdump: illegal option -- D The problem seems to be that the feature test linking instead of using the flags returned by pcap-config points exactly to the 32-bit version of libpcap and fails: $ pcap-config --libs -L/usr/lib -lpcap /usr/bin/gcc -DCHECK_FUNCTION_EXISTS=pcap_list_datalinks CMakeFiles/cmTC_d38b1.dir/CheckFunctionExists.c.o -o cmTC_d38b1 /usr/lib/libpcap.so ld: fatal: file /usr/lib/libpcap.so: wrong ELF class: ELFCLASS32 collect2: error: ld returned 1 exit status It likely has to do with these CMake variables: TCPDUMP_LINK_LIBRARIES=/usr/lib/libpcap.so;socket;nsl PCAP_LIBRARIES=/usr/lib/libpcap.so Soon after that tcpdump linking does not force the 32-bit library and works: /usr/bin/gcc CMakeFiles/tcpdump.dir/fptype.c.o CMakeFiles/tcpdump.dir/tcpdump.c.o CMakeFiles/tcpdump.dir/bpf_dump.c.o CMakeFiles/tcpdump.dir/missing/pcap_dump_ftell.c.o CMakeFiles/tcpdump.dir/missing/datalinks.c.o CMakeFiles/tcpdump.dir/missing/dlnames.c.o -o tcpdump libnetdissect.a -lpcap -lsocket -lnsl This automatically uses the 64-bit library (not in /usr/lib). Autoconf build does not have the problem with feature tests because it uses exactly what pcap-config has returned and lets the linker figure the details out: configure:6157: checking for pcap_findalldevs configure:6157: gcc -o conftest -I/usr/inet6/include -g -O2 conftest.c -L/usr/lib -lpcap -lsocket -lnsl >&5 configure:6157: $? = 0 Sun C does not have the problem with feature tests: CMake invokes it same way as GCC, but Sun C manages to produce feature test programs that work as expected: /opt/solarisstudio12.4/bin/suncc -DCHECK_FUNCTION_EXISTS=pcap_list_datalinks CMakeFiles/cmTC_97fb2.dir/CheckFunctionExists.c.o -o cmTC_97fb2 /usr/lib/libpcap.so This looks like some heuristics or a short-cut built into Sun C, but it seems wrong to depend on it. Moreover, Sun C does not have to guess hard for tcpdump linking because the flags are just correct: /opt/solarisstudio12.4/bin/suncc CMakeFiles/tcpdump.dir/fptype.c.o CMakeFiles/tcpdump.dir/tcpdump.c.o -o tcpdump libnetdissect.a -lpcap -lsocket -lnsl -- Denis Ovsienko
--- End Message ---
_______________________________________________ tcpdump-workers mailing list tcpdump-workers () lists tcpdump org https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers
Current thread:
- compiler warnings on AIX and Solaris Denis Ovsienko via tcpdump-workers (Jul 23)
- Re: compiler warnings on AIX and Solaris Guy Harris via tcpdump-workers (Jul 24)
- Message not available
- Re: compiler warnings on AIX and Solaris Denis Ovsienko via tcpdump-workers (Jul 24)
- Message not available
- Re: compiler warnings on AIX and Solaris Denis Ovsienko via tcpdump-workers (Jul 25)
- build failures on Solaris Denis Ovsienko via tcpdump-workers (Jul 31)
- Re: build failures on Solaris Guy Harris via tcpdump-workers (Jul 31)
- Message not available
- Re: build failures on Solaris Denis Ovsienko via tcpdump-workers (Jul 31)
- Message not available
- Message not available
- Re: build failures on Solaris Guy Harris via tcpdump-workers (Aug 01)
- Message not available
- Message not available
- Message not available
- Re: build failures on Solaris Denis Ovsienko via tcpdump-workers (Aug 01)
- Message not available
- Message not available
- Message not available
- Re: build failures on Solaris Guy Harris via tcpdump-workers (Aug 01)
- Re: build failures on Solaris Denis Ovsienko via tcpdump-workers (Aug 02)
- Re: build failures on Solaris Dagobert Michelsen via tcpdump-workers (Aug 03)
- Message not available
- Re: build failures on Solaris Guy Harris via tcpdump-workers (Aug 03)