目录
- 目录
- 编译信息
- 说明
- run文件说明
- 制作run文件
- 运行run文件
- 关于交叉编译的移植问题
- 参考
编译信息
作者:xzf
创建时间:2021/12/07
更新时间:2021/12/07
说明
本文主要说明,由于使用到交叉编译,需要自己交叉编译出来后,需要安装或移植到目标板子,所以需要制作一个移植安装包。
环境:Linux xzf-linux 5.11.0-37-generic #41~20.04.2-Ubuntu SMP Fri Sep 24 09:06:38 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
run文件说明
- run文件的内容分两部分一部分是可执行脚本,后一部分是压缩包
- 可执行脚本的作用是解压压缩包和进行文件内容的安装和配置
- 压缩包的内容是安装文件
run文件结构:
|-----------------|
| 可执行脚本 |
|-----------------|
| 程序压缩包 |
|-----------------|
制作run文件
- 以安装sqlite3为例子
- 打包安装好的结构
install
文件夹
.
├── bin
│ └── sqlite3
├── include
│ ├── sqlite3ext.h
│ └── sqlite3.h
├── lib
│ ├── libsqlite3.a
│ ├── libsqlite3.la
│ ├── libsqlite3.so -> libsqlite3.so.0.8.6
│ ├── libsqlite3.so.0 -> libsqlite3.so.0.8.6
│ ├── libsqlite3.so.0.8.6
│ └── pkgconfig
│ └── sqlite3.pc
└── share
└── man
└── man1
└── sqlite3.1
- bin的目录是可执行文件
- include是头文件
- lib是库文件
- share是查看命令帮助信息
- 安装程序,其实就是把文件移动到Linux系统相对应的文件夹
故,我们先明确要把文件都移动到那里,这样就知道我们的脚本应该怎样写了
以上面为例子。
| 安装包 | 对应的路径 |
| -------------- | -------------- |
| bin | /usr/bin |
| include | /usr/include |
| lib | /usr/lib |
| share/man/man1 | /usr/share/man |
- 打包和编写脚本
- 把install文件夹打包成tar.gz
tar zcvf install.tar.gz install/
- 编写固定格式的shell脚本,名为install.sh
#!/bin/bash
# 获取相对路径
CDIR=`pwd`
INSTALLDIR=$CDIR/install
if [ -d "$INSTALLDIR" ]; then
rm -rf "$INSTALLDIR"
fi
# 当读取到边界“__ARCHIVE_BOUNDARY__”的时候,执行+1行并退出。
ARCHIVE=`awk '/^__ARCHIVE_BOUNDARY__/ { print NR + 1; exit 0; }' $0`
# 提取压缩包,并解压
tail -n +$ARCHIVE $0 > install.tar.gz
tar -zpxf install.tar.gz
# 该执行的命令
# Todo
# 删除压缩包
rm install.tar.gz
# 删除解压后的文件夹install
rm -rf ./install
exit 0
__ARCHIVE_BOUNDARY__
- 修改我们需要的命令
#!/bin/bash
# 获取相对路径
CDIR=`pwd`
INSTALLDIR=$CDIR/install
if [ -d "$INSTALLDIR" ]; then
rm -rf "$INSTALLDIR"
fi
# 当读取到边界“__ARCHIVE_BOUNDARY__”的时候,执行+1行并退出。
ARCHIVE=`awk '/^__ARCHIVE_BOUNDARY__/ { print NR + 1; exit 0; }' $0`
#提取压缩包,并解压
tail -n +$ARCHIVE $0 > install.tar.gz
tar -zpxf install.tar.gz
# 该执行的命令
#把文件移动到上述的目标路径
INSTALLPATH=/usr
mv ./install/bin/* $INSTALLPATH/bin
mv ./install/include/* $INSTALLPATH/include
mv ./install/lib/* $INSTALLPATH/lib
mv ./install/share/man/man1/* $INSTALLPATH/share/man
#以防万一,增加chmod +x 命令
chmod +x $INSTALLPATH/bin/sqlite3
#删除压缩包
rm install.tar.gz
#删除解压后的文件夹install
rm -rf ./install
exit 0
__ARCHIVE_BOUNDARY__
- 生成run文件
cat install.sh install.tar.gz > install.run
运行run文件
# 增加运行权限
chmod +x install.run
./install.run
# 当脚本运行
sh install.run
关于交叉编译的移植问题
tar: can't create symlink 'install/lib/libsqlite3.so.0' to 'libsqlite3.so.0.8.6': Operation not permitted
问题:主要问题可以参考网上的搜索的,反正没有搞懂。
解决办法:不要在x86上打包,在arm系统里打包就好。
参考
linux中run文件的制作:https://www.jianshu.com/p/59bbf9ce854c