libsystemd 不包含任何符号

libsystemd 不包含任何符号

我正在尝试编译以下 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.

相关内容