プログラミング教室


■Linux でアプリリリース時の so が見つからない問題の解決策

1.以下の3つの事を全部実行しないとダメでした。
  
  (1) 実行プログラムを以下のような配置とします。
  
   |- qt.conf        lib と plugins の配置を教える
   |- application      実行プログラム
   +- lib
   |  |- libicudata.so.56
   |  |- libicui18n.so.56
   |  |- libicuuc.so.56
   |  |- libQt5Core.so.5
   |  |- libQt5DBus.so.5            これが重要
   |  |- libQt5Gui.so.5
   |  |- libQt5Network.so.5
   |  |- libQt5PrintSupport.so.5
   |  |- libQt5Script.so.5
   |  |- libQt5ScriptTools.so.5
   |  |- libQt5Svg.so.5
   |  |- libQt5Widgets.so.5
   |  |- libQt5XcbQpa.so.5
   |  |- libQt5Xml.so.5
   |  |- libQt5XmlPatterns.so.5
   |  +- libqxcb.so    ここにはいらないかも知れない
   | 
   +-- plugins
     |- platforminputcontexts               IME用の plugins
     |  |- libcomposeplatforminputcontextplugin.so
     |  |- libfcitxplatforminputcontextplugin.so
     |  |- libibusplatforminputcontextplugin.so
     |  +- libqtvirtualkeyboardplugin.so
     |  
     +-- platforms                     これが無いと起動しない
       +- libqxcb.so   ここにも同じファイルが必要

qt.conf ファイルの内容

[Paths]
Prefix=./           // 実行フォルダをカレントとして、オフセットで表現する
Libraries=lib       // ./lib の意味となる
Plugins=plugins     // ./pulugins の意味となる

  
  (2) リンクオプションで -rpath を指定するのに application.pro の最後に以下を追加する。
  

QMAKE_LFLAGS = -Wl,-rpath,\'./lib\' -Wl,-O1 -Wl,-rpath-link,/home/mosako/Qt5.8.0/5.8/gcc_64/lib
              ↑                  ↑
            アプリのフォルダ         Qtのフォルダを指定しないとコンパイルが通らない

  
  
  (3) main.cpp で addLibraryPath()を追加する。
  

    QApplication a(argc, argv);
    QCoreApplication::addLibraryPath("./lib");      // これも無いと起動しない

  
  以上、3つの事を色々調べてやっとできたので、同じ事ではまる日本人のために残します。


プログラミング教室 一覧へ