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.

관련 정보