Я пытаюсь записать a systemd
сервис, который использует сторожевой таймер, и после
sudo apt install libsystemd-dev
Я проверил, чтобы удостовериться, что это было доступно:
$ ldconfig -p |grep systemd
libsystemd.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libsystemd.so.0
libsystemd.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libsystemd.so
libnss_systemd.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libnss_systemd.so.2
Затем проверенный для проверки компоновщик мог найти его:
$ echo "int main(){}" | gcc -x c++ -Wl,--no-as-needed -llibsystemd - && ldd a.out | grep libsystemd
/usr/bin/ld: cannot find -llibsystemd
collect2: error: ld returned 1 exit status
Почему не может ld
найти его?
-llibsystemd
не ищет libsystemd
- это ищет liblibsystemd
Как отмечено в man g++
:
-l library The linker searches a standard list of directories for the library, which is actually a file named liblibrary.a. The linker then uses this file as if it had been specified precisely by name.
Так, Вы хотите -lsystemd
echo "int main(){}" | gcc -x c++ -Wl,--no-as-needed -lsystemd - && ldd a.out | grep libsystemd