我需要交叉编译一些 C/C++ 库。该库依赖于多个 C/C++ 库。其中一些库又依赖于其他库。所有库都带有配置脚本。我知道如何在主机系统上编译和安装库——在我需要的库之前安装依赖项。显然这在交叉编译时是行不通的。任何提示表示赞赏。谢谢。
最佳答案
通常,要交叉编译一个自动工具包,您需要将几个额外的参数传递给 ./configure
:--host
和 --build
。 --host
是构建程序将运行的系统名称,--build
是进行编译的系统名称。
当我说“系统名称”时,我指的是 ARCH-VENDOR-OS-LIBC
形式的元组。 (例如 i686-pc-linux-gnu
是描述我当前使用的系统的元组。)有时部分元组被省略,例如 mingw32 工具链(在我的系统上) , mingw32 交叉工具与元组 i586-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/