2017-05-15 8 views
0

CentOS 7にダイナミックリンクされたQt 5.7ウィジェットアプリケーションをデプロイしようとしています。ディレクトリーを構築するにはlibQt5Widgets.soをコピーしてください。私は別のマシンにアプリケーションをコピーした場合しかし、それは言う:CentOS 7でダイナミックにリンクされたQt 5.7ウィジェットアプリケーションをデプロイ - 共有ライブラリを開くことができません

./Application: error while loading shared libraries: libQt5Widgets.so.5: cannot open shared object file: No such file or directory 

私は依存関係をチェックする場合:

ldd ./Application 

結果である:

linux-vdso.so.1 => (0x00007ffdb7126000) 
libQt5Widgets.so.5 => /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5 (0x00007f2d3f33e000) 
libQt5Gui.so.5 => /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Gui.so.5 (0x00007f2d3eb95000) 
libQt5Network.so.5 => /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Network.so.5 (0x00007f2d3e837000) 
libQt5Core.so.5 => /opt/Qt5.7.0/5.7/gcc_64/lib/libQt5Core.so.5 (0x00007f2d3e11c000) 
libGL.so.1 => /lib64/libGL.so.1 (0x00007f2d3de97000) 
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2d3dc7b000) 
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f2d3d972000) 
libm.so.6 => /lib64/libm.so.6 (0x00007f2d3d66f000) 
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f2d3d459000) 
libc.so.6 => /lib64/libc.so.6 (0x00007f2d3d098000) 
libz.so.1 => /lib64/libz.so.1 (0x00007f2d3ce81000) 
libicui18n.so.56 => /opt/Qt5.7.0/5.7/gcc_64/lib/libicui18n.so.56 (0x00007f2d3c9e7000) 
libicuuc.so.56 => /opt/Qt5.7.0/5.7/gcc_64/lib/libicuuc.so.56 (0x00007f2d3c62f000) 
libicudata.so.56 => /opt/Qt5.7.0/5.7/gcc_64/lib/libicudata.so.56 (0x00007f2d3ac4b000) 
libdl.so.2 => /lib64/libdl.so.2 (0x00007f2d3aa47000) 
libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00007f2d3a845000) 
librt.so.1 => /lib64/librt.so.1 (0x00007f2d3a63c000) 
libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f2d3a305000) 
/lib64/ld-linux-x86-64.so.2 (0x00007f2d3fb8e000) 
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f2d3a0db000) 
libxcb-dri3.so.0 => /lib64/libxcb-dri3.so.0 (0x00007f2d39ed7000) 
libxcb-present.so.0 => /lib64/libxcb-present.so.0 (0x00007f2d39cd4000) 
libxcb-randr.so.0 => /lib64/libxcb-randr.so.0 (0x00007f2d39ac6000) 
libxcb-xfixes.so.0 => /lib64/libxcb-xfixes.so.0 (0x00007f2d398bd000) 
libxcb-render.so.0 => /lib64/libxcb-render.so.0 (0x00007f2d396b3000) 
libxcb-shape.so.0 => /lib64/libxcb-shape.so.0 (0x00007f2d394af000) 
libxcb-sync.so.1 => /lib64/libxcb-sync.so.1 (0x00007f2d392a7000) 
libxshmfence.so.1 => /lib64/libxshmfence.so.1 (0x00007f2d390a4000) 
libglapi.so.0 => /lib64/libglapi.so.0 (0x00007f2d38e75000) 
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f2d38c4d000) 
libXext.so.6 => /lib64/libXext.so.6 (0x00007f2d38a3b000) 
libXdamage.so.1 => /lib64/libXdamage.so.1 (0x00007f2d38838000) 
libXfixes.so.3 => /lib64/libXfixes.so.3 (0x00007f2d38631000) 
libX11-xcb.so.1 => /lib64/libX11-xcb.so.1 (0x00007f2d3842f000) 
libX11.so.6 => /lib64/libX11.so.6 (0x00007f2d380f1000) 
libxcb-glx.so.0 => /lib64/libxcb-glx.so.0 (0x00007f2d37ed6000) 
libxcb-dri2.so.0 => /lib64/libxcb-dri2.so.0 (0x00007f2d37cd1000) 
libxcb.so.1 => /lib64/libxcb.so.1 (0x00007f2d37aaf000) 
libXxf86vm.so.1 => /lib64/libXxf86vm.so.1 (0x00007f2d378a8000) 
libdrm.so.2 => /lib64/libdrm.so.2 (0x00007f2d37699000) 
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f2d37437000) 
libXau.so.6 => /lib64/libXau.so.6 (0x00007f2d37233000) 

は、問題を解決するために、私は以下のライブラリを展開しようとしました:

Qt5.7.0/5.7/gcc_64/lib/libicui18n.so.56 
Qt5.7.0/5.7/gcc_64/lib/libicuuc.so.56 
Qt5.7.0/5.7/gcc_64/lib/libicudata.so.56 
Qt5.7.0/5.7/gcc_64/lib/libQt5Core.so.5.7.0 
Qt5.7.0/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0 
Qt5.7.0/5.7/gcc_64/lib/libQt5Gui.so.5.7.0 
Qt5.7.0/5.7/gcc_64/lib/libQt5Network.so.5.7.0 
アプリケーションと

また、シンボリックリンクを作成しました。

libQt5Core.so.5 
libQt5Widgets.so.5 
libQt5Gui.so.5 
libQt5Network.so.5 

libQt5Widgets.so.5.0.7と他のQt 5.7ライブラリを作成しました。残りの共有ライブラリは他のマシンにも存在します。しかし、それはまだ動作しません。

これは次のトピックに関連しています。 Qt project release ubuntu - error while loading shared libraries: libQt5Widgets.so.5およびQT5.7 How to deploy Qt Application on Linux しかし、彼らには解決策がありません。

  1. 何が問題なのですか?
  2. どうすれば解決できますか?

ありがとうございます。

答えて

0

それがここに記載されているとおり:Qt for Linux/X11 - Deployment (Creating the application package)

...しかし、共有ライブラリの主な問題は、動的リンカは、Qtライブラリを見つけることを保証しなければならないということです。別の方法で言わない限り、動的リンカーはアプリケーションが置かれているディレクトリを検索しません。

  • あなたは(ほとんどのシステムでは、例えばは/ usr/libの)システムライブラリパスの1つでQtライブラリをインストールすることができます。

は、この問題を克服する3つの解決策があります。

  • アプリケーションをリンクするときに、-rpathコマンドラインオプションに所定のパスを渡すことができます。これにより、ダイナミックリンカはアプリケーションの起動時にこのディレクトリを参照します。
  • あなたは(あなたは、動的リンカ設定を変更し、アプリケーションの起動スクリプトを書くことができます例えば、LD_LIBRARY_PATH環境変数に、アプリケーションのディレクトリを追加する。

    1. 私は好みません最初のオプションは単純なアプリケーションのために/usr/binディレクトリを汚染しない。

    2. Qt CreatorのBuild & Runタブでは、デフォルトでAdd build library search path to LD_LIBRARY_PATHというオプションがチェックされています。 (また、Makefile(ビルドディレクトリ内)の内容では、LFLAGSには-rpathオプションが指定されています。)理由はわかりませんが、このオプションは私のためには機能しません。

    3. 私は3番目のオプションを選択しました。私が提供したリンクでは、これに使用できるスクリプトが用意されています。

    Application.sh

    #!/bin/sh 
    appname=`basename $0 | sed s,\.sh$,,` 
    
    dirname=`dirname $0` 
    tmp="${dirname#?}" 
    
    if [ "${dirname%$tmp}" != "/" ]; then 
    dirname=$PWD/$dirname 
    fi 
    LD_LIBRARY_PATH=$dirname 
    export LD_LIBRARY_PATH 
    $dirname/$appname "[email protected]" 
    

    しかし、ドキュメントはその警告します:

    注:アプリケーションが "実行時に設定したユーザID" で実行している場合されますそれはrootによって所有され、LD_LIBRARY_PATHは一部のプラットフォームでは無視されます。この場合、LD_LIBRARY_PATHアプローチの使用はオプションではありません)。

    また、あなたはマニュアルに従って、あなたのアプリケーションのディレクトリにplatforms/libqxcb.soThe Qt xcb platform pluginを含める必要があることに注意する必要があります。あなたはそれを見つけることができます。これらを行った後

    Qt5.7.0/5.7/gcc_64/plugins/platforms/libqxcb.so 
    

    あなたはまだ問題を持っています。 libqxcb.soは、他の依存関係を持っているので、(あなたはコマンドでそれを確認することができます:ldd libqxcb.soを):

    This application failed to start because it could not find or load the Qt platform plugin "xcb" 
    in "". 
    
    Available platform plugins are: xcb. 
    
    Reinstalling the application may fix this problem. 
    ./Application.sh: line 12: 3783 Aborted (core dumped) $dirname/$appname "[email protected]" 
    

    これがある:それは文句を言うでしょう

    libQt5XcbQpa.so.5 
    libQt5DBus.so.5 
    

    はそれを解決するには、から共有ライブラリをコピーする必要があります:

    Qt5.7.0/5.7/gcc_64/lib/libQt5XcbQpa.so.5.7.0 
    Qt5.7.0/5.7/gcc_64/lib/libQt5DBus.so.5.7.0 
    

    と作成し、対応するシンボリックリンク:

    libQt5XcbQpa.so.5 
    libQt5DBus.so.5 
    

    他の共有ライブラリ、実行可能ファイル、およびスクリプトが存在するディレクトリにあります。 重要で、共有ライブラリのシンボリックリンクを名前libQt5で作成することができます。それ以外の場合は、まだ開けません。次のように

    簡単に言えば、ディレクトリの内容は次のようになります。

    Application (The executable) 
    Application.sh (The script you will execute to run your application) 
    libicudata.so.56 
    libicui18n.so.56 
    libicuuc.so.56 
    libQt5Core.so.5 -> libQt5Core.so.5.7.0 
    libQt5Core.so.5.7.0 
    libQt5DBus.so.5 -> libQt5DBus.so.5.7.0 
    libQt5DBus.so.5.7.0 
    libQt5Gui.so.5 -> libQt5Gui.so.5.7.0 
    libQt5Gui.so.5.7.0 
    libQt5Network.so.5 -> libQt5Network.so.5.7.0 
    libQt5Network.so.5.7.0 
    libQt5Widgets.so.5 -> libQt5Widgets.so.5.7.0 
    libQt5Widgets.so.5.7.0 
    libQt5XcbQpa.so.5 -> libQt5XcbQpa.so.5.7.0 
    libQt5XcbQpa.so.5.7.0 
    platforms/libqxcb.so 
    
    関連する問題