我正在编写一个小 C 程序来在 linux 上测试 io_uring:
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <liburing.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
int main(int argc, char *argv[])
{
struct io_uring ring;
io_uring_queue_init(1, &ring, 0);
return 0;
}
但是编译时出现错误:
$ gcc -luring io_uring_test.c
/usr/bin/ld: /tmp/cc6Iqq1Z.o: in function `main':
io_uring_test.c:(.text+0x329): undefined reference to `io_uring_queue_init'
collect2: error: ld returned 1 exit status
为什么会这样?我在 Debian 上安装了 liburing-dev 和 liburing2 软件包。
该库确实处于标准路径中:
$ find /usr -name '*uring*'
/usr/share/doc/liburing2
/usr/share/doc/liburing-dev
/usr/share/doc/liburing-dev/examples/io_uring-test.c
/usr/share/doc/liburing-dev/examples/io_uring-cp.c
/usr/share/man/man3/io_uring_get_sqe.3.gz
/usr/share/man/man3/io_uring_queue_exit.3.gz
/usr/share/man/man3/io_uring_queue_init.3.gz
/usr/share/man/man7/io_uring.7.gz
/usr/share/man/man2/io_uring_setup.2.gz
/usr/share/man/man2/io_uring_register.2.gz
/usr/share/man/man2/io_uring_enter.2.gz
/usr/include/liburing.h
/usr/include/linux/io_uring.h
/usr/include/liburing
/usr/include/liburing/io_uring.h
/usr/lib/x86_64-linux-gnu/liburing.a
/usr/lib/x86_64-linux-gnu/liburing.so
/usr/lib/x86_64-linux-gnu/liburing.so.2
/usr/lib/x86_64-linux-gnu/liburing.so.2.1.0
/usr/lib/x86_64-linux-gnu/pkgconfig/liburing.pc
我看不出我做错了什么:(