-
方法一(原生态打包):
-
首先已经生成了一个可执行文件,使用
image.pngldd exe
可以找出对应的依赖库,exe
表示所对应的可执行文件,确定好所有的依赖库都能找到。如果出现如下图所示,即表明对应的库未找到。 -
此时可以使用
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
即可。
方法二(第三方打包工具):
重点!!
- 无论使用第一种方式 还是第二种方式,在执行
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去就行了。 - 如果对你有帮助 麻烦点个赞吧
网友评论