I want to use the libnetlink library shipped with iproute2. I specified it's include dir with -I and it's lib dir with -L. However I still get some undefined reference errors.
test.c: In function ‘addqdisc’:
test.c:26:3: warning: ignoring return value of ‘rtnl_open’, declared with attribute warn_unused_result [-Wunused-result]
   26 |   rtnl_open(rth, 0);
      |   ^~~~~~~~~~~~~~~~~
test.c:27:3: warning: ignoring return value of ‘rtnl_talk’, declared with attribute warn_unused_result [-Wunused-result]
   27 |   rtnl_talk(rth, &req.n, NULL);
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccCnXM9F.o: in function `addqdisc':
test.c:(.text+0x79): undefined reference to `rtnl_open'
/usr/bin/ld: test.c:(.text+0x97): undefined reference to `rtnl_talk'
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <asm/types.h>
#include <sys/socket.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <libnetlink.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int addqdisc() {
  struct rtnl_handle *rth;
  struct {
    struct nlmsghdr n;
    struct tcmsg        t;
    char buf[64*1024];
  } req = {
    .n.nlmsg_len = NLMSG_LENGTH(sizeof(struct tcmsg)),
    .n.nlmsg_flags = NLM_F_REQUEST | NLM_F_EXCL | NLM_F_CREATE,
    .n.nlmsg_type = RTM_NEWQDISC,
    .t.tcm_family = AF_UNSPEC,
  };
  rtnl_open(rth, 0);
  rtnl_talk(rth, &req.n, NULL);
}
int main() {
  addqdisc();
  return 0;
}
gcc test.c -o test -I/pwd/Downloads/linux-5.17/iproute2/include -l /pwd/Downloads/linux-5.17/iproute2/lib/libnetlink.a -lnetlink -static
Anyone knows why?
