c++ - 如何交叉编译具有依赖项的 C++ 库?

标签 c++ c autotools autoconf automake

我需要交叉编译一些 C/C++ 库。该库依赖于多个 C/C++ 库。其中一些库又依赖于其他库。所有库都带有配置脚本。我知道如何在主机系统上编译和安装库——在我需要的库之前安装依赖项。显然这在交叉编译时是行不通的。任何提示表示赞赏。谢谢。

最佳答案

通常,要交叉编译一个自动工具包,您需要将几个额外的参数传递给 ./configure:--host--build--host 是构建程序将运行的系统名称,--build 是进行编译的系统名称。

当我说“系统名称”时,我指的是 ARCH-VENDOR-OS-LIBC 形式的元组。 (例如 i686-pc-linux-gnu 是描述我当前使用的系统的元组。)有时部分元组被省略,例如 mingw32 工具链(在我的系统上) , mingw32 交叉工具与元组 i58​​6-mingw32msvc 和/或 amd64-mingw32msvc 一起安装。

(configure 还有另一个参数,--target,它用于交叉编译编译器,并指定正在构建的编译器在生成代码时将针对的系统。)

每个工具链在/usr 下都有自己的子目录,例如/usr/i586-mingw32msvc。您将要在此处安装新软件包以便找到它们。使用 --prefix 参数来配置

因此,为了从我的 GNU/Linux 系统交叉编译到 MinGW32 系统,我会像这样运行 configure:

./configure --host=i586-mingw32msvc --build=i686-pc-linux-gnu --prefix=/usr/i586-mingw32msvc

因此,从您的依赖关系图的叶子开始,逐步向上。您可能还想将 --enable-static --disable-shared 传递给 configure:这将停止为 libtooled 包创建动态库。如果一个包需要在构建过程中运行一个程序,您可能必须本地安装一些包并交叉编译它们。

有时 configure 的测试会失败:例如,在它尝试编译和运行程序的地方。这些测试通常会设置一个缓存变量,您也可以在命令行上将其传递给 configure。同样,您可以覆盖程序路径和库编译/链接标志等内容。检查你的包的 ./configure --help.

关于c++ - 如何交叉编译具有依赖项的 C++ 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11796127/

相关文章:

c++ - 窗口中出现 glTexImage2D 切片和对齐问题

c - void 表达式的无效使用 - 使用类型转换添加 2 个不同类型的指针

c - 在 C 编程中求解方程并从两个方程中找到 x 和 y 的值

c - GNU Autotools - 如何处理必需但可能丢失的 header ?

c++ - 这部分代码是否需要互斥体?

C++ - 在第 3 方 header 中弃用了从字符串常量到 ‘char*’ 的转换

c# - 2017 年巴西夏令时开始时间不正确

c - 如何让它不共享相同的内存

linux - 包含 linux 内核配置的正确方法是什么?

autotools - 将qt项目与autotool集成