本帖最后由 lcsuper 于 2021-10-19 19:21 编辑
前言:在贝壳云上安装一个老版本的qb,因为添加了功能所以必须要编译。系统使用的是armbian 5.9,但是编译的时候,libtorrent有一个文件始终无法编译通过,卡死在那也不报错。猜测原因可能是贝壳云的CPU性能太弱了,所以只能在x86的机器上通过工具链交叉编译成静态的二进制文件放到贝壳云上。 以前有为N1交叉编译aria2的经验,所以这次同样选择在Ubuntu下面使用aarch64-linux-gnu-gcc作为工具链来交叉编译。无奈才疏学浅,搞不定编译使用的脚本。连libtorrent使用的一大堆库都没办法顺利编译出来。 - https://github.com/rampageX/qb-nox-static-cc/blob/main/cb-qb-static-aarch64.sh
复制代码
遂赶快来试试。中间遇坑无数,本文主要记录填坑过程。
1、编译平台:alpine-standard-3.14.2-x86_64 这个linux的发行版本从来没用过,所以碰到了很多问题。根据网上的教程安装完毕后,一定要把源/etc/apk/repositories 里面的community启用,默认是只有main,这一点坑了我半天,因为有些软件包不在main里面,怎么都安装不上。我用的是这样 - http://mirrors.aliyun.com/alpine/v3.14/main
- http://mirrors.aliyun.com/alpine/v3.14/community
复制代码
2、编译工具链musl-cross-make - https://github.com/richfelker/musl-cross-make
复制代码
下载源码,修改 config.mak, 把target改成aarch64的标志: - TARGET=aarch64-linux-musl
复制代码
后面就有坑了,编译完安装的时候,安装目录要有两个,config.mak加这两行 - OUTPUT = /opt/cross
- OUTPUT = /usr/loca
复制代码
3、github打不开的问题,导致git的时候,没法下载,需要用到国内的git加速服务
4、先要apk add bash 安装bash包,脚本要用bash xxxx.sh启动,因为alpine是用的bash,请原谅我的小白
5、最大的坑:使用编译的boost库编译libtorrent的时候,报错1 target update fail,但是就不显示具体的错误细节。这个地方我卡了几天排故,因为每次运行脚本都要重新下载编译安装,非常费时间。后来我把git下载都注释掉了,直接编译才定位到故障。 能看到错误细节的方法就是在脚本的 第146行,boost编译命令加一个 -q的参数就能看到了。
- BOOST_ROOT="${install_dir}/boost" BOOST_INCLUDEDIR="${install_dir}/boost" BOOST_BUILD_PATH="${install_dir}/boost" "${install_dir}/boost/b2" -q -j"$(nproc)" toolset=gcc-aarch64 dht=on encryption=on crypto=openssl i2p=on extensions=on variant=release threading=multi link=static boost-link=static runtime-link=static cxxflags="${CXXFLAGS}" cflags="${CPPFLAGS}" linkflags="${LDFLAGS}" install --prefix="${install_dir}"
复制代码
6、boost编译libtorrent报错的地方是文件include/libtorrent/rss.hpp第270行
- std::map<std::string, time_t> m_added
复制代码std::map没有声明,在最顶上加上就行了
7、在脚本142行后加一句
- cp /home/rss.hpp ./include/libtorrent/rss.hpp
复制代码
rss.hpp我先修改好了,放在home目录下面,脚本git后,把改过的文件复制过去
运行脚本编译,最后生成的文件17M左右,拷贝到/usr/bin,给权限 最后感谢大神的脚本,qb在贝壳云上完美运行。
|