Boost-Build:从linux构建windows可执行文件



我有一个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=windows, bjam --toolset=gcc-mingw --target-os=windows等,但似乎没有工作。

请注意,mingw已正确安装并正常工作。手动调用编译器会生成正确的输出文件。

任何想法?

另外,我如何让bjam为我的用户配置中列出的每个工具集构建一个版本?果酱文件?

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

UPDATE我从http://mingw-cross-env.nongnu.org/下载了这个脚本,它允许我一次编译mingw以及boost库,这样问题就得到了解决。我找到了一种方法,使bjam调用mingw编译器(我在不同的计算机上,所以我不能在这个时候提供解决方案)。

不幸的是,我不认为这可以做到(我已经失败了很多次),我认为原因是因为mingw不支持编译Boost。人们实现这一目标的唯一方法似乎是使用MS Visual Studio在win32下维护一个单独的构建环境。

从你的问题,它不清楚如果你使用bjam来构建你的应用程序,或者如果你只是试图构建Windows版本的Boost库(。库或.dll文件)稍后链接到您的应用程序。在我的尝试中,我试图以"通常"的方式做到这一点,在Windows版本的Boost库被编译,然后应用程序与mingw32单独编译并与Boost链接。

不幸的是,我的绊脚石到目前为止,我只能得到两个结果-要么构建失败时编译Boost到Win32动态库(.dll),或Win32静态库成功构建,但libtool拒绝将它们链接到应用程序。

看看Arch Linux用来编译mingw32-boost的PKGBUILD文件,你可能会从它们是如何做的得到一些提示。似乎bjam threadapi=win32 target-os=windows就足够了。不要忘记正确设置前缀,这样你就不会用win32版本覆盖你的本地库!

在我的ubuntu盒子上,它就像

一样简单
sudo apt-get install mingw
然后构建
export CC=i586-mingw32msvc-gcc
make 

利润!

相关内容

  • 没有找到相关文章

最新更新