netfilter queue undefined reference to `nfq_open’

netfilter queue undefined reference to `nfq_open’

I have writting this code:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <linux/types.h>
#include <linux/netfilter.h>
#include <libnetfilter_queue/libnetfilter_queue.h>
int main(int argc, char **argv)
{
    struct nfq_handle *h;
    printf("opening library handlen");
    h = nfq_open();
    nfq_close(h);
    exit(0);
}

and when I try to compile it says that:

/tmp/ccEv9MYS.o: In function `main':
test1.c:(.text+0x1a): undefined reference to `nfq_open'
test1.c:(.text+0x2a): undefined reference to `nfq_close'
collect2: ld returned 1 exit status

I tried checking if the library is found by gcc and it is (when I modifiy the incluse of libnetfilter_queue there is an error), I recompiled the library and made sur that the fonctions I’m calling are in in it.

If you have any clue thanks for helping

Icompile using this:

gcc -o test test1.c

I have also tried:

gcc -o test -lnetfilter_queue test1.c
gcc -o test -L/usr/local/lib test1.c

Well, from the gcc manual page, for the -llibrary linking option

It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, ‘foo.o -lz bar.o’ searches library ‘z’ after file foo.o but before bar.o. If bar.o refers to functions in ‘z’, those functions may not be loaded.

That says, the linker works from left to right, so need to put the dependent on left hand side.

You need to change your compilation statement to

 gcc -o test test1.c -lnetfilter_queue
.
.
.
.