原本是在mac os上编译的,但是会出现一些问题,因此还是开了台linux容器进行编译,本文可结合之前的linux下编译breakpad共同查看。
Linux下Breakpad编译_Edward.W的博客-CSDN博客https://blog.csdn.net/u013379032/article/details/130754480?spm=1001.2014.3001.5502
总体过程
1. 还是下载一些基础的依赖,这边和x86平台的一样
sudo apt-get update
sudo apt install g++
sudo apt install git-all
sudo apt install build-essential
sudo apt-get install zlib1g-dev
2. 拉取代码,虽然官网建议用fetch增加依赖,不过还是直接用git一起搞定把
git clone https://chromium.googlesource.com/breakpad/breakpad
cd breakpad
git clone https://chromium.googlesource.com/linux-syscall-support src/third_party/lss
3. 交叉编译一个aarch64
sudo ./configure CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ AR=aarch64-linux-gnu-gcc-ar RANLIB=aarch64-linux-gnu-gcc-ranlib --host=aarch64-linux-gnu
make
遇到的坑
怎么说呢,越简单的问题越容易遇到坑,就上面这么简单的几个步骤,在configure步骤的坑可一点都不少。接下来我们就来盘点一下把。
1. C编译器的问题
error: C compiler cannot create executables cross compile arm64
可能的解决方案:
(1) 权限问题,需要sudo ./configure .....
(2) 如果还有问题就是交叉编译的包没有安装,需要安装aarch64的gcc和g++
sudo apt-get install gcc-aarch64-linux-gnu
sudo apt-get install g++-aarch64-linux-gnu
2. O_TMPFILE的问题
undeclared identifier 'O_TMPFILE
这个O_TMPFILE是在Linux上的标记,如果非要用Mac编译,可以直接删掉,不影响功能
3. gmkdir不存在
gmkdir实际上就是mkdir,既然找不到,就建个软连接把。
sudo ln -s /bin/mkdir gmkdir
4. arc4random有问题
error: ‘arc4random’ was not declared in this scope
在代码里面定义了三种random的方法,只需要把/src/common/linux/guid_creator.cc里面关于使用和定义arc4random相关的地方都注释掉,程序内部会自动调用其他的随机算法。
5. N_UNDF没找到
src/common/stabs_reader.cc:102:35: error: ‘N_UNDF’ was not declared in this scope
修改src/common/stabs_reader.h
#include <a.out.h> //原本
#include <linux/a.out.h> //修改后
6. 找不到zstd
具体问题是:
/usr/bin/ld: cannot find -lzstd
解决方案:
sudo apt-get update
apt-get install libzstd-dev
如果还不能行的话
curl https://github.com/facebook/zstd/releases/download/v1.5.5/zstd-1.5.5.tar.gz -o zstd.tar.gz
tar -zvxf zstd-1.5.5.tar.gz
cd zstd-1.5.5/
make prefix=/usr/aarch64-linux-gnu/
sudo make install
7. 找不到zlib
具体问题是
/usr/bin/ld: cannot find -lz
解决方案
curl http://www.zlib.net/zlib-1.3.tar.gz -O output.tar.gz
tar -zvxf output.tar.gz
cd zlib-1.3
./configure --prefix=/usr/aarch64-linux-gnu/
make
sudo make install (write to cross bin)