간단한 Qt 콘솔 응용 프로그램 (dbus 서비스)을 만들었으며 systemd를 사용하여 실행해야합니다.Qt 응용 프로그램이 systemd에서 시작될 때 라이브러리를로드 할 수 없습니다.
그러나 나는 확신 (libQt5Gui.so.5를로드 할 수 없습니다 내가 를 실행할 때마다이 응용 프로그램을 시작하는 데 실패 my_serv 시작 systemctl 및 그 응용 프로그램을 나타내는 -xe journalctl에서 로그를 가진 끝 나는 (그것을 DBUS에 객체를 등록 할 때 오류가 발생합니다 즉, 루트 사용자로 콘솔에서이 작업을 수행 할 때 다른 한편으로 응용 프로그램에서
raspberrypi systemd[1]: Started my_serv.service. raspberrypi MyService[2812]: /opt/services/MyService: error while loading shared libraries: libQt5Gui.so.5: cannot open shared object file: No such file or directory raspberrypi systemd[1]: my_serv.service: main process exited, code=exited, status=127/n/a raspberrypi systemd[1]: Unit my_serv.service entered failed state.
잘 실행,하지만 난 그게 아니라고 생각 :)이 특정 라이브러리 관련이 없습니다 관련성 있음) : 모든 이진 도서관에 대한 링크가 좋은 것 같다 ls -al /usr/local/qt5/lib/libQt5Gui.*
-rwxrwxrwx /usr/local/qt5/lib/libQt5Gui.la
-rwxrwxrwx /usr/local/qt5/lib/libQt5Gui.prl
lrwxrwxrwx /usr/local/qt5/lib/libQt5Gui.so -> libQt5Gui.so.5.9.1
lrwxrwxrwx /usr/local/qt5/lib/libQt5Gui.so.5 -> libQt5Gui.so.5.9.1
lrwxrwxrwx /usr/local/qt5/lib/libQt5Gui.so.5.9 -> libQt5Gui.so.5.9.1
-rwxrwxrwx /usr/local/qt5/lib/libQt5Gui.so.5.9.1
: 0
Qt는 라이브러리는 다음 경로에 의해 있는지 찾아이다.
ldd MyService
libQt5Gui.so.5 => /usr/local/qt5/lib/libQt5Gui.so.5 (0x76a92000)
libQt5DBus.so.5 => /usr/local/qt5/lib/libQt5DBus.so.5 (0x76a0d000)
libQt5Core.so.5 => /usr/local/qt5/lib/libQt5Core.so.5 (0x7654e000)
서비스 파일
[Service]
ExecStart=/opt/services/MyService
User=root
init.d 및 i 비록 systemd가 사용자/로컬 라이브러리 및 경로를 인식하지 못합니다. 예를 들어, 시작시 init.d는/bin,/sbin/lib 폴더를 알고 있지만/usr/bin/usr/local/bin/usr/local/lib 등에 대해서는 알지 못합니다. – Xplatforms
시도해 볼 수 있습니다 Qt libs를/lib 폴더에 링크하거나 더 나은/usr/lib 폴더를 먼저 시도하십시오. 서비스를 시작하거나이 값을 설정하고 bash 스크립트에서 바이너리를 시작하기 바로 전에 LD_LIBRARY_PATH를 설정하려고 할 수도 있습니다 – Xplatforms