记录一下LLVM交叉编译踩的坑

交叉编译

关于这个概念其实很简单,生成其它平台上的可执行文件的编译过程就叫交叉编译。

环境准备

第一步先实现最简单的跨平台交叉编译,我使用Windows版本的LLVM,尝试编译 Linux 平台的 ELF 文件。首先交叉编译要进行一定的环境配置,配置 include path 和库的目录。因为交叉编译需要用到一些 gcc 的库,所以自己编译 glibc 然后复制 include path 和 lib path 到自己的机器是没用的。

这里我选择直接使用一台自己装过 gcc 开发环境的机器,将 /usr/include 目录的文件拷贝过来,这里我拷贝到 D:\Linux\include 下,再将 gcc 的库拷贝到 D:\Linux\lib\ 目录下。这里还有一个坑就是启动文件也需要指定,启动文件在 gcc 里面都有。

最后编译的命令行为: clang -fuse-ld=lld -g main.cpp -target x86_64-linux-gnu -ID:\Linux\include -L-BD:\Linux\lib\gcc\x86_64-linux-gnu\11 -o main -BD:\Linux\lib\gcc\x86_64-linux-gnu\11 即可。

但是注意,因为好像这个目录下的 lib 是软链接 /usr/lib/x86_64-linux-gnu 下的库,所以需要用下面的库进行覆盖才可以完成编译。

目前看上去效果还不错,特此记录一下,后面做 ARM 平台的交叉编译可以 refer 这次的经历。