3

我有一个 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 以及 boost 库,所以这个问题得到了解决。我找到了一种方法让 bjam 调用 mingw 编译器(我在另一台计算机上,所以目前无法提供解决方案).. 其他问题仍未解决。

4

2 回答 2

1

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

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

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

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

于 2011-04-28T01:48:34.337 回答
0

在我的 ubuntu 盒子上,它很简单

sudo apt-get install mingw

然后构建

export CC=i586-mingw32msvc-gcc
make 

利润!

于 2011-04-28T08:22:42.493 回答