Linux下Qt應用程序的發佈

              最近一直在學習Qt,用Qt寫了一個程序,但是不知道怎麼發佈,網上說的都是在windows下怎麼發佈Qt應用程序,但是,在windows下Qt應用程序依賴的庫文件linux下的名字不同。於是,我就想到Linux下有沒有這麼一個命令,能夠找到一個可執行文件運行時所依賴的庫文件,百度一下,還真的有ldd命令。


                ldd的作用是打印可執行文件依賴的共享庫文件,它是glibc的一部分:

root@zhangyingxiu-K43SJ:~# ldd --help
Usage: ldd [OPTION]... FILE...

--help              print this help and exit
--version           print version information and exit
-d, --data-relocs       process data relocations
-r, --function-relocs   process data and function relocations
 -u, --unused            print unused direct dependencies
 -v, --verbose           print all information
For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/eglibc/+bugs>.



root@zhangyingxiu-K43SJ:~# ldd --version
ldd (Ubuntu EGLIBC 2.17-0ubuntu5.1) 2.17
版權所有 (C) 2012 Free Software Foundation, Inc.
這是自由軟件;請參考原始碼的版權聲明。本軟件不提供任何擔保,甚至不會包括可售性或適用於任何特定目的的擔保。
由 Roland McGrath 和 Ulrich Drepper 編寫。

          


            但是,我在網上查資料發現ldd本身不是一個程序,而僅是一個shell腳本,所以自己在ubuntu13.04上查找了一下:

root@zhangyingxiu-K43SJ:~# which ldd
/usr/bin/ldd
root@zhangyingxiu-K43SJ:~# ls -al /usr/bin/ldd
-rwxr-xr-x 1 root root 5267  9月 30 22:56 /usr/bin/ldd
root@zhangyingxiu-K43SJ:~# file  /usr/bin/ldd
/usr/bin/ldd: Bourne-Again shell script, ASCII text executable


現在已經知道ldd的本質,更多ldd的用法可以百度。於是我運行命令查看動態庫:

root@zhangyingxiu-K43SJ:/mywork/mytest/myqq# ldd MYQQ
    linux-gate.so.1 =>  (0xb77a6000)
    libQt5Widgets.so.5 => /usr/lib/i386-linux-gnu/libQt5Widgets.so.5 (0xb717b000)
    libQt5Sql.so.5 => /usr/lib/i386-linux-gnu/libQt5Sql.so.5 (0xb713d000)
    libQt5Network.so.5 => /usr/lib/i386-linux-gnu/libQt5Network.so.5 (0xb6fff000)
    libQt5Gui.so.5 => /usr/lib/i386-linux-gnu/libQt5Gui.so.5 (0xb6c21000)
    libQt5Core.so.5 => /usr/lib/i386-linux-gnu/libQt5Core.so.5 (0xb67ee000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb6705000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb66e8000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6533000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6518000)
    libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xb64c8000)
    libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0xb63c7000)
    libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xb6290000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb624c000)
    libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb6233000)
    libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xb620a000)
    libGL.so.1 => /usr/lib/nvidia-310/libGL.so.1 (0xb612a000)
    libicui18n.so.48 => /usr/lib/i386-linux-gnu/libicui18n.so.48 (0xb5f56000)
    libicuuc.so.48 => /usr/lib/i386-linux-gnu/libicuuc.so.48 (0xb5df0000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb5deb000)
    librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb5de2000)
    /lib/ld-linux.so.2 (0xb77a7000)
    libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0xb5ddb000)
    libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb5d9a000)
    libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb5d77000)
    libnvidia-tls.so.310.44 => /usr/lib/nvidia-310/tls/libnvidia-tls.so.310.44 (0xb5d73000)
    libnvidia-glcore.so.310.44 => /usr/lib/nvidia-310/libnvidia-glcore.so.310.44 (0xb4051000)
    libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xb403f000)
    libicudata.so.48 => /usr/lib/i386-linux-gnu/libicudata.so.48 (0xb2ece000)
    libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xb2ec9000)
    libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xb2ec2000)

然後,把Qt應用程序運行時需要的Qt庫文件:libQt5Core.so.5.0.1,libQt5Gui.so.5.0.1,libQt5Network.so.5.0.1,libQt5Sql.so.5.0.1,libQt5Widgets.so.5.0.1拷貝到與可執行文件相同的文件夾下,然後打包壓縮,就可以拿到其他的linux系統下運行了。注意:以上顯示的庫文件很多都是軟鏈接文件,所以要到相應文件夾中找到真正的庫文件


 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章