繁体   English   中英

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

[英]Boost - cross compile - “from Linux” “to Windows”

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

现在是一个重要的问题:

是否有可能从“LINUX”编写“WINDOWS”BOOST LIBRARIES (如果有人说“是”,我会相信他,只要他之前已经完成它将在这里写一个对我有用的解决方案。抱歉悲观,但我试图这样做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

官方文档有一个关于交叉编译的部分。 与您正在进行的比较,有两个问题:

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

  2. 你需要target-os = windows

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

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

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

这是我使用的命令。 我测试了它们的升压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

做完了!

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM