Boost-Build:构建可从linux执行的窗口

时间:2011-04-22 17:16:48

标签: c++ linux mingw boost-build cross-compiling

我有一个c ++代码库,我需要构建windows和unix版本的。重要的是,Windows可执行文件在没有安装cygwin或类似程序的情况下工作。哦,我正试图从ubuntu实现这个目标。

我一直在试图弄清楚如何让boost-build处理它,但到目前为止还是很短暂。为简单起见假设这个项目结构:

root/
|- src/
|  |- core/
|  |  |- number.cpp
|  |  |- number.hpp
|  |- main.cpp
|- jamroot

为了尝试使boost-build生成Windows二进制文件作为第一步,我在我的主目录中创建了一个user-config.jam文件,其中包含以下内容:

using gcc : 4.4 : i586-mingw32msvc-g++ : <rc>i586-mingw32msvc-windres <archiver>i586-mingw32msvc-ar ;

我的jamroot文件如下所示:

exe hello :
    [ glob-tree *.cpp ]
    : : <target-os>windows
;

但是当我运行bjam时,我得到一个unix可执行文件(没有扩展名)但不是一个Windows可执行文件。使用.exe扩展名重命名应用程序并在Windows上运行不起作用。我尝试了bjam的各种选项,例如bjam --toolset=gcc --target-os=windowsbjam --toolset=gcc-mingw --target-os=windows等,但注意似乎有用..

为了记录,mingw已正确安装并正常工作。手动调用编译器会生成正确的输出文件。

有什么想法吗?

另外,如何让bjam为我的user-config.jam文件中列出的每个工具集构建一个版本?

奖金问题: 最后,我需要链接一个boost库和一个自定义预构建库。我该如何为不同的目标系统指定不同的库?

更新我从http://mingw-cross-env.nongnu.org/下载了脚本,这样我就可以一次编译mingw以及提升库,这样就可以解决问题..我找到了一种方法使bjam调用mingw编译器(我在不同的计算机上,所以我目前无法提供解决方案)..其他问题仍未解决。

2 个答案:

答案 0 :(得分:1)

不幸的是我不认为这可以做到(我多次失败)我认为原因是因为mingw不支持编译Boost。人们似乎完成此任务的唯一方法是使用MS Visual Studio在win32下维护一个单独的构建环境。

根据您的问题,目前还不清楚您是否正在使用bjam构建应用程序,或者您是否只是尝试构建Windows版本的Boost库(.lib或.dll文件)以便稍后与您的应用程序链接。在我的尝试中,我尝试以“通常”的方式执行此操作,因为Windows版本的Boost库已经编译,然后应用程序使用mingw32单独编译并与Boost链接。

不幸的是,到目前为止,我的绊脚石是我只能得到两个结果 - 编译Boost到Win32动态库(.dll)时构建失败,或者win32静态库成功构建,但是libtool refuses to link them in with the app

查看Arch Linux用于编译mingw32-boost的PKGBUILD文件,因为您可能会从中获得一些提示。似乎bjam threadapi=win32 target-os=windows就足够了。不要忘记正确设置前缀,因此不要使用win32版本覆盖本机库!

答案 1 :(得分:0)

在我的ubuntu框中,它就像

一样简单
sudo apt-get install mingw

然后构建

export CC=i586-mingw32msvc-gcc
make 

利润!