Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 handle\n");
    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
like image 582
user1928596 Avatar asked Mar 17 '23 14:03

user1928596


1 Answers

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
like image 198
Sourav Ghosh Avatar answered Mar 20 '23 03:03

Sourav Ghosh