编译错误:/ usr / bin / ld:找不到-lnetlink

时间:2013-06-20 02:19:07

标签: c ubuntu gcc linker

我正在尝试使用gcc编译一些c代码,但我一直得到:

/usr/bin/ld: cannot find -lnetlink

我在gcc make参数中包含 -lnetlink 。使用 locate netlink 可以找到多个项目。我甚至通过使用 -L / usr / include / linux 告诉gcc到底在哪里找到一个,但它仍然给出了错误。

下面的gcc命令参数:

gcc -g -ggdb -Wall -Wextra  -o mt6d mt6d.o address_worker.o tunnel_worker.o mt6d_assoc.o addr_gen.o send_utils.o if_utils.o tun_utils.o icmp_utils.o utils.o  -lcrypto -lssl -lnetlink -lpthread -lnetfilter_queue

我也遇到了 libnetlink.h 的错误,但是能够让它们得到解决,但是我已经把它包含在这里,如果这可能是相关的,这个错误会立即出现在另一个之后是固定的。通过使用 C_INCLUDE_PATH

进行修复

我最近升级到Ubuntu 13.04并在此之前使用了11.04。

如果您需要更多信息,请与我们联系。任何帮助将不胜感激!

谢谢, -Alan

1 个答案:

答案 0 :(得分:0)

  

我正在尝试使用gcc编译一些c代码,但我一直得到:

从技术上讲,这个阶段称为链接。这种差异一开始可能看起来很微妙,但它是一个非常重要的差异,可以在出现这样的问题时协助调查。

您不应该使用/usr/include引用-L路径。 -L添加了库的搜索路径,通常只有标题文件应显示在/usr/include下。

libnl启用pkg-config,因此您应该使用它。

例如(假设您已安装libnl-3-dev):

gcc -o my_executable $(pkg-config --libs libnl-3.0) my_foo.o my_bar.o

Makefile中,您可以执行以下操作来实现此效果:

LDLIBS+=$(shell pkg-config --libs libnl-3.0)
CFLAGS+=$(shell pkg-config --cflags libnl-3.0)