2017-09-06 1 views
1

간단한 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 
+1

init.d 및 i 비록 systemd가 사용자/로컬 라이브러리 및 경로를 인식하지 못합니다. 예를 들어, 시작시 init.d는/bin,/sbin/lib 폴더를 알고 있지만/usr/bin/usr/local/bin/usr/local/lib 등에 대해서는 알지 못합니다. – Xplatforms

+0

시도해 볼 수 있습니다 Qt libs를/lib 폴더에 링크하거나 더 나은/usr/lib 폴더를 먼저 시도하십시오. 서비스를 시작하거나이 값을 설정하고 bash 스크립트에서 바이너리를 시작하기 바로 전에 LD_LIBRARY_PATH를 설정하려고 할 수도 있습니다 – Xplatforms

답변

1

대부분의 아마 링커 디렉토리가 문맥에서 알 수없는이 (/etc/systemd/system/my_serv.service)과 같은 다음과 같이 LDD 출력은 systemctl입니다. 환경 변수 LD_LIBRARY_PATH을 서비스 스크립트의 시작 부분에있는 관련 디렉토리로 설정하십시오. 자세한 내용은 man ld.so을 참조하십시오. 또는 시스템의 다른 서비스 스크립트를보고 환경이 올바르게 설정되어 있는지 확인하십시오.

관련 문제