Hi Ged, On Tue, Mar 11, 2025 at 10:00:04AM +0000, G.W. Haywood wrote: > > Debian 11, gcc version 10.2.1-6 here. > > 8<---------------------------------------------------------------------- > $ gcc -g3 -gdwarf-4 -Wall -lmnl -lnetfilter_queue -o nf-queue nf-queue.c > /usr/bin/ld: /tmp/ccbLJv89.o: in function `nfq_send_verdict': > /home/ged/nf-queue.c:30: undefined reference to `nfq_nlmsg_put' > /usr/bin/ld: /home/ged/nf-queue.c:31: undefined reference to `nfq_nlmsg_verdict_put' > /usr/bin/ld: /home/ged/nf-queue.c:34: undefined reference to `mnl_attr_nest_start' > /usr/bin/ld: /home/ged/nf-queue.c:37: undefined reference to `mnl_attr_put_u32' > /usr/bin/ld: /home/ged/nf-queue.c:41: undefined reference to `mnl_attr_nest_end' > /usr/bin/ld: /home/ged/nf-queue.c:43: undefined reference to `mnl_socket_sendto' > /usr/bin/ld: /tmp/ccbLJv89.o: in function `queue_cb': > /home/ged/nf-queue.c:60: undefined reference to `nfq_nlmsg_parse' > /usr/bin/ld: /home/ged/nf-queue.c:65: undefined reference to `mnl_nlmsg_get_payload' > /usr/bin/ld: /home/ged/nf-queue.c:75: undefined reference to `mnl_attr_get_payload' > /usr/bin/ld: /home/ged/nf-queue.c:78: undefined reference to `mnl_attr_get_payload_len' > /usr/bin/ld: /home/ged/nf-queue.c:93: undefined reference to `mnl_attr_get_u32' > /usr/bin/ld: /home/ged/nf-queue.c:97: undefined reference to `mnl_attr_get_u32' > /usr/bin/ld: /home/ged/nf-queue.c:111: undefined reference to `mnl_attr_get_payload' > /usr/bin/ld: /tmp/ccbLJv89.o: in function `main': > /home/ged/nf-queue.c:162: undefined reference to `mnl_socket_open' > /usr/bin/ld: /home/ged/nf-queue.c:168: undefined reference to `mnl_socket_bind' > /usr/bin/ld: /home/ged/nf-queue.c:172: undefined reference to `mnl_socket_get_portid' > /usr/bin/ld: /home/ged/nf-queue.c:184: undefined reference to `nfq_nlmsg_put' > /usr/bin/ld: /home/ged/nf-queue.c:185: undefined reference to `nfq_nlmsg_cfg_put_cmd' > /usr/bin/ld: /home/ged/nf-queue.c:187: undefined reference to `mnl_socket_sendto' > /usr/bin/ld: /home/ged/nf-queue.c:195: undefined reference to `nfq_nlmsg_put' > /usr/bin/ld: /home/ged/nf-queue.c:196: undefined reference to `nfq_nlmsg_cfg_put_params' > /usr/bin/ld: /home/ged/nf-queue.c:198: undefined reference to `mnl_attr_put_u32' > /usr/bin/ld: /home/ged/nf-queue.c:199: undefined reference to `mnl_attr_put_u32' > /usr/bin/ld: /home/ged/nf-queue.c:201: undefined reference to `mnl_socket_sendto' > /usr/bin/ld: /home/ged/nf-queue.c:211: undefined reference to `mnl_socket_setsockopt' > /usr/bin/ld: /home/ged/nf-queue.c:217: undefined reference to `mnl_socket_recvfrom' > /usr/bin/ld: /home/ged/nf-queue.c:223: undefined reference to `mnl_cb_run' > collect2: error: ld returned 1 exit status > 8<---------------------------------------------------------------------- > nf-queue.c has compiled fine. There is a problem with the shared libraries libmnl.so and libnetfilter_queue.so. Those 2 libraries should satisfy the mnl_ and nfq_ references respectively. On my (Slackware x86_64) system, "nm -D /usr/lib64/libmnl.so|grep -Ew T" gives: | 0000000000003687 T mnl_attr_get_len@@LIBMNL_1.0 | 00000000000036ac T mnl_attr_get_payload@@LIBMNL_1.0 | 0000000000003698 T mnl_attr_get_payload_len@@LIBMNL_1.0 | ... for a total of 68 lines. What do you get? (you may have to put /usr/lib instead of /usr/lib64). > > $ gcc --version | head -n1 > gcc (Debian 10.2.1-6) 10.2.1 20210110 Same as my Debian 11.5 VM. > > This is a raspberry Pi4B, 8GBytes, 64 bit. > > 8<---------------------------------------------------------------------- > $ uname -a > Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux > $ 8<---------------------------------------------------------------------- Looks like an arm-specific problem. nm output should tell us more. > > There were other problems when I tried the same thing on x86, but that > was gcc version 8, so I think they can be ignored. gcc-8 should be fine. Please document these problems also. Cheers ... Duncan.