[英]Cross-Compile of Boost for GCC ARM (Linux) from Windows building .o but not .a
[英]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
官方文档有一个关于交叉编译的部分。 与您正在进行的比较,有两个问题:
您指定i586-mingw32msvc-gcc并应指定i586-mingw32msvc-g ++。 前者是C编译器,用于编译C ++代码库有点棘手;-)
你需要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.