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

pic*_*c11 7 c c++ automake autoconf autotools

我需要交叉编译一些C/C++库.该库依赖于几个C/C++库.其中一些库反过来依赖于其他库.所有库都附带配置脚本.我知道如何在主机系统上编译和安装库 - 在我需要的lib之前安装依赖项.显然,这在交叉编译时不起作用.任何提示都表示赞赏.谢谢.

Jac*_*lly 10

通常,要交叉编译自动化程序包,可以将一些额外的参数传递给./configure:--host--build.--host是构建的程序将运行--build的系统的名称,并且是进行编译的系统的名称.

当我说"系统的名称"时,我的意思是形式的元组ARCH-VENDOR-OS-LIBC.(例如i686-pc-linux-gnu,描述我正在使用的系统的元组.)有时候元组的部分被省略了,就像在mingw32工具链的情况下一样(在我的系统上,mingw32交叉工具与元组一起安装i586-mingw32msvc和/或amd64-mingw32msvc) .

(还有另一个配置参数,--target用于交叉编译编译器,并指定生成代码时正在构建的编译器将作为目标的系统.)

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

所以要从我的GNU/Linux系统交叉编译到MinGW32系统,我会这样运行configure:

./configure --host=i586-mingw32msvc --build=i686-pc-linux-gnu --prefix=/usr/i586-mingw32msvc
Run Code Online (Sandbox Code Playgroud)

所以从依赖图的叶子开始,然后继续前进.您可能还希望传递--enable-static --disable-sharedconfigure:这将停止为libtooled包创建动态库.如果程序包需要在构建过程中运行程序,则可能必须本机安装某些程序包以及交叉编译它们.

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