最近一直在学习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系统下运行了。注意:以上显示的库文件很多都是软链接文件,所以要到相应文件夹中找到真正的库文件。
http://blog.csdn.net/zyx_linux/article/details/20067335