Boost - 交叉编译 - “从Linux”到“Windows”

时间:2009-09-09 11:58:32

标签: c++ boost compilation

我从他们的主页“www.boost.org”下载了“boost”(1.40.0)源代码。 我安装了Linux(Ubuntu 9.04 Jaunty)并尝试从我的“LINUX”机器将boost库编译为“WINDOWS”版本(例如“.dll”,而不是“.so”)。

现在是一个重要的问题:

是否有可能从“LINUX”编辑“WINDOWS”BOOST图书馆(如果有人说“是”,我会相信他,只有他之前已经完成它将写在这里对我来说很有用的解决方案。对不起那种悲观情绪但是我试着做了3天而且到目前为止没有什么积极的事情)

到目前为止,我已经用这种方式编译了c ++程序。 对于从Linux到Linux的编译,我使用了“gcc”(或“g ++”)编译器。 对于从Linux到Windows的编译,我使用了“i586-mingw32msvc-gcc”(或“i568-mingw32msvc-g ++”)编译器(例如,“mingw32”包中包含“Ubuntu”)。

所以这个策略我也想用来编译boost库,到目前为止我已经尝试了这个(在阅读了boost主页上的“入门”文章之后):

- 1。我从“root”boost源代码目录运行“bootstrap.sh”:

./bootstrap.sh

- 2。然后我在“project-config.jam”文件中更改了一件事(来自“using gcc;”):

using gcc : : i586-mingw32msvc-gcc ;

- 3。最后运行“bjam”可执行文件:

./bjam stage

但是我没有创建升级库的“Windows”版本,而是收到了很多错误消息。

有人能帮助我吗?

提前致谢。

Petike

5 个答案:

答案 0 :(得分:10)

官方文档有cross compilation部分。将其与您正在进行的操作进行比较,有两个问题:

  1. 您指定i586-mingw32msvc-gcc并应指定i586-mingw32msvc-g ++。前者是一个C编译器,用于编译C ++代码库有点棘手; - )

  2. 您需要target-os = windows

  3. 请注意,有一个已知的错误 - 在创建静态库时,它们不会通过ranlib传递,而且mingw链接器对此特别不满。如果您打算使用静态库,则必须手动运行ranlib。

答案 1 :(得分:3)

这里有一个非常简单的程序可以遵循从linux到windows的交叉构建提升:

https://web.archive.org/web/20110604002004/http://www.vle-project.org/wiki/Cross_compilation_Win32

答案 2 :(得分:2)

这是我使用的命令。我测试了它们的升压1.46和1.49。

首先,在/ usr / i686-w64-mingw32 / bin中创建指向编译器的链接。您可以运行此脚本:

#!/bin/bash

binDir="/usr/bin"
destDir="/usr/i686-w64-mingw32/bin"

cd "$binDir"
mkdir -p "$destDir"

for name in $(ls i686-w64-mingw32*); do
    newName=$(echo "$name" | sed 's/i686-w64-mingw32-//g')
    if [ -f "$destDir/$newName" ]; then
        rm "$destDir/$newName"
    fi
    ln -s "$binDir/$name" "$destDir/$newName"
done

然后,安装bjam。在ubuntu / debian上,它包含在“libboost1.48-dev”包中

apt-get install libboost1.48-dev

完成,成为root并运行

env PATH=/usr/i686-w64-mingw32/bin:$PATH bjam toolset=gcc target-os=windows variant=release threading=multi threadapi=win32 link=static --prefix=/usr/i686-w64-mingw32 -j 4 --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged install

完成!

答案 3 :(得分:0)

Boost根据您当前的系统对您的操作系统和当前版本进行假设。如果您要获取win32头文件,从include路径中删除所有linux头,然后尝试构建,该怎么办?

答案 4 :(得分:0)

这不是一个真正的答案,但是:不要!

交叉编译到一个完全不同的平台通常是****的巨大痛苦。

如果您尝试在同一台计算机上构建Windows二进制文件,比如打包,请使用带有Windows,mingw和相应脚本的虚拟机。

然后你甚至可以使用你的构建在vm等上运行自动化测试,这应该是一个巨大的优势。