Translate

[Ubuntu] Cannot mix incompatible Qt library 에러 원인과 해결방법




OS: Ubuntu 15.10 gnome (x64)




증상

APK Studio 프로그램을 받아서 실행하려 하니 아래와 같이 오류메시지가 발생했다.
1004lucifer

lucifer@lucifer-Vostro-V13:/devTools/apkstudio-d49d3de$ ./apkstudio.sh
Cannot mix incompatible Qt library (version 0x50402) with this library (version 0x50201)
Aborted (core dumped)
lucifer@lucifer-Vostro-V13:/devTools/apkstudio-d49d3de$






원인

구글 검색을 해보니 QT 관련 라이브러리를 해당 프로그램으로 복사하라고 되어있었다.
아마 프로그램에 들어있는 QT 라이브러리들의 버전이 동일하지 않거나 잘못 된 것으로 예상이 된다.





해결과정

1. 실행하려는 프로그램에 libQt5*.so.5 라는 이름을 가진 파일들이 몇개 있었다.

lucifer@lucifer-Vostro-V13:/devTools/apkstudio-d49d3de$ tree
.
├── apkstudio
├── apkstudio.png
├── apkstudio.sh
├── libQt5Core.so.5
├── libQt5Gui.so
├── libQt5Gui.so.5
├── libQt5Widgets.so
├── libQt5Widgets.so.5
├── platforms
│   └── libqxcb.so
├── uninstall
├── uninstall.dat
└── Uninstall.desktop

1 directory, 15 files
lucifer@lucifer-Vostro-V13:/devTools/apkstudio-d49d3de$



2. 일단 QT를 다운로드받아 설치 했다.
    (설치과정을 모르겠으면 댓글 달아주세요. 추가로 설명 달겠습니다.)
1004lucifer
다운로드 링크
최신버전: https://www.qt.io/download-open-source/
모든버전: http://download.qt.io/archive/qt/


3. 설치된 QT 디렉토리에서 프로그램에서 사용하는 파일을 찾아 프로그램으로 복사를 해줬다.
lucifer@lucifer-Vostro-V13:/$ cp /devTools/Qt5.6.1/5.6/gcc_64/lib/libQt5Core.so /devTools/apkstudio-d49d3de/libQt5Core.so.5
lucifer@lucifer-Vostro-V13:/$ cp /devTools/Qt5.6.1/5.6/gcc_64/lib/libQt5Core.so /devTools/apkstudio-d49d3de/libQt5Gui.so.5
lucifer@lucifer-Vostro-V13:/$ cp /devTools/Qt5.6.1/5.6/gcc_64/lib/libQt5Core.so /devTools/apkstudio-d49d3de/ libQt5Widgets.so.5
1004lucifer

4. 프로그램을 다시 실행시키니 아래와 같이 다시 에러 메시지가 나오며 구동되지 않았다.
lucifer@lucifer-Vostro-V13:/devTools/apkstudio-d49d3de$ ./apkstudio.sh
/devTools/apkstudio-d49d3de/./apkstudio: error while loading shared libraries: libicui18n.so.56: cannot open shared object file: No such file or directory
lucifer@lucifer-Vostro-V13:/devTools/apkstudio-d49d3de$


5. libicui18n.so.56 이 없어서 구동이 안된다고 하는데..
   지금 작업을 하기전에 libicui18n.so.52 를 이미 설치했었다.
   QT 버전에 따라 필요한 라이브러리 버전이 다르다고 느껴졌다.
   libicui18n.so.52 를 사용하는 QT를 설치한 후 Library를 복사했다.
   (버전에 맞는 QT를 찾느라 QT를 버전별로 5번 정도 설치한것 같은데..
    이럴줄 알았으면 차라리 libicui18n.so.56 라는걸 찾아서 설치하거나 소스를 받아 컴파일 하는게 빠르겠다.)
lucifer@lucifer-Vostro-V13:/devTools/apkstudio-d49d3de$ cp /devTools/Qt5.3.0/5.3/gcc_64/lib/libQt5Core.so ./libQt5Core.so.5
lucifer@lucifer-Vostro-V13:/devTools/apkstudio-d49d3de$ cp /devTools/Qt5.3.0/5.3/gcc_64/lib/libQt5Gui.so ./libQt5Gui.so.5
lucifer@lucifer-Vostro-V13:/devTools/apkstudio-d49d3de$ cp /devTools/Qt5.3.0/5.3/gcc_64/lib/libQt5Widgets.so ./libQt5Widgets.so.5


6. 제대로 맞는 버전으로 Library를 복사해주니 정상적으로 실행되는 것을 확인했다.





요약
* 소스를 다운받아서 컴파일 할 수 있다면 소스를 받아 컴파일 하는게 좋음!!

직접 컴파일 할 수 없다면..
1. 프로그램에 QT 관련 라이브러리가 있는지 확인 (libQT로 시작되는 파일)
2. QT 프로그램 설치
3. 다른 의존성 라이브러리가 필요하면 메시지가 나오지 않을 때 까지 설치
4. 프로그램 실행


댓글