我正在尝试编译以下 foo.c:
#include <systemd/sd-journal.h>
int main(int argc, char *argv[]) {
sd_journal_print(LOG_NOTICE, "Hello World");
return 0;
}
和
gcc `pkg-config --cflags --libs libsystemd` foo.c
收到 ld 错误:
undefined reference to 'sd_journal_print_with_location'
当我运行时nm /lib/x86_64-linux-gnu/libsystemd.so.0.14.0
(我认为该库应该包含此函数和其他 sd_ 函数的定义),我得到:没有符号。 (与其他符号列表实用程序的结果相同)。
没有符号的共享库?
我使用的是 Ubuntu 16.04,使用 apt 安装了 libsystemd-dev。一些来源引用了 libsystemd-journal-dev,但我不相信它存在于我的发行版中。
我想做的就是弄清楚如何使用 systemd 的日志进行系统范围的日志记录。我知道我可能可以使用 syslog,并且它将在幕后使用 systemd,但更愿意了解这里发生的情况。
答案1
这是一个动态符号:
$ nm -D /lib/x86_64-linux-gnu/libsystemd.so.0.25.0 | grep sd_journal_print_with_location
0000000000026ec0 T sd_journal_print_with_location
要构建程序,您需要在其用户之后指定库:
gcc $(pkg-config --cflags libsystemd) foo.c $(pkg-config --libs libsystemd)
您需要的包是libsystemd-dev
.