linux下QT打包程序遇到的问题及解决办法!

  • 方法一(原生态打包):

  • 首先已经生成了一个可执行文件,使用ldd exe可以找出对应的依赖库,exe表示所对应的可执行文件,确定好所有的依赖库都能找到。如果出现如下图所示,即表明对应的库未找到。

    image.png

  • 此时可以使用 sudo find / -name filename 找出该库所对应的位置,filename是未找到的文件名,然后再使用export LD_LIBRARY_PATH=filePath:$LD_LIBRARY_PATH 其中filePath表示该文件所对应的文件夹。之后再使用ldd exe | grep 'not found'检查一遍看是否还有not found的文件,

  • 下一步需要把可执行程序所依赖的库打包出来。创建一个cplib.sh文件,代码如下:

exe="/xxx/exe"
des="/xxx/Lib"
deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')  
cp $deplist $des 
  • 其中exe表示可执行文件的路径,des是要保存依赖库的路径。然后执行chmod +x cplib.sh并且执行./cplib.sh,执行完之后对应的文件所有依赖的库都copy到了des所对应的目录下了。

然后把对应的可执行文件和依赖库放在一个文件夹下面一起打包,并在该文件夹下编写一个start.sh,代码如下:

export LD_LIBRARY_PATH=$PWD/Lib:$LD_LIBRARY_PATH
./exe
  • 其中exe表示可执行文件,Lib表示打包的依赖库所对应的文件夹。然后chmod +x start.sh即可。把以上的打包好发布在其他电脑上进入打包的目录 然后运行./start.sh即可。

方法二(第三方打包工具):

linuxdeployqt--工具下载地址
教程地址


重点!!

  • 无论使用第一种方式 还是第二种方式,在执行export LD_LIBRARY_PATH=$PWD/Lib:$LD_LIBRARY_PATH指令后都有会突然卡一下然后出现这样的错误[1]:
➜  MapHandleAPP  export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH 
➜  MapHandleAPP  ls
[1]    13311 segmentation fault (core dumped)  ls --color=tty
➜  MapHandleAPP 
  • 或者出现这样的错误[2]:
This application failed to start because it could not find or load the Qt platfo
rm plugin "xcb".                                                                
Available platform plugins are: kms, linuxfb, minimal, minimalegl, offscreen, xc
b.
  • 第二种错误可以使用打包工具的方式解决。若出现第一种错误网上的原因比较少,这边的解决方案比较笨,就是先运行程序,缺少哪一个就加哪一个,一个一个加链接库,如果出现一下的错误:
boost_system***        /`GLIBCXX_3.4.xxx' not define
  • 注意不是not found。此时,只要把之前打包好的链接库里面的libstdc++.so.6加到新的lib去就行了。
  • 如果对你有帮助 麻烦点个赞吧

你可能感兴趣的:(linux下QT打包程序遇到的问题及解决办法!)