netfilter queue undefined对`nfq_open'的引用

时间:2014-12-17 06:43:25

标签: c linux ubuntu gcc netfilter

我写了这段代码:

#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);
}

当我尝试编译它时说:

/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

我尝试检查gcc是否找到了库,并且它是(当我修改libnetfilter_queue的包含时出现错误),我重新编译了库并使得我正在调用的函数在其中。< / p>

如果你有任何线索感谢帮助

使用此编译:

gcc -o test test1.c

我也尝试过:

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

1 个答案:

答案 0 :(得分:3)

嗯,从gcc manual page开始,-llibrary链接选项

  

在您编写此选项的命令中,它会有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,'foo.o -lz bar.o'在文件foo.o之后但在bar.o之前搜索库'z'。如果bar.o引用'z'中的函数,则可能无法加载这些函数。

也就是说,链接器从左到右工作,因此需要将依赖项放在左侧。

您需要将编译语句更改为

 gcc -o test test1.c -lnetfilter_queue