使用 SysGCC 工具链和 MinGW 在 Windows for Raspberry Pi 上交叉编译 Boost
Cross-Compiling Boost on Windows for Raspberry Pi using SysGCC Toolchain and MinGW
我目前正在尝试在 Windows 7(64 位) 上交叉编译 Boost 1.64.0 Raspberry Pi (运行 Jessie) 使用 Raspberry SysGCC 4.9.2 Toolchain and MinGW 6.3.0.
我把所有东西安装到以下目录:
- 提升至 C:\Boost.64.0
- SysGCC 到 C:\SysGCC\Raspberry
- MinGW 到 C:\MinGW.3.0
将 SysGCC 和 MinGW 的 bin 文件夹添加到全局 PATH 变量中:
- C:\SysGCC\Raspberry\bin
- C:\MinGW.3.0\mingw32\bin
并在我的主目录中创建了一个 user-config.jam(见 GCC 配置):
# Copyright 2003, 2005 Douglas Gregor
# Copyright 2004 John Maddock
# Copyright 2002, 2003, 2004, 2007 Vladimir Prus
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
# This file is used to configure your Boost.Build installation. You can modify
# this file in place, or you can place it in a permanent location so that it
# does not get overwritten should you get a new version of Boost.Build. See:
#
# http://www.boost.org/boost-build2/doc/html/bbv2/overview/configuration.html
#
# for documentation about possible permanent locations.
# This file specifies which toolsets (C++ compilers), libraries, and other
# tools are available. Often, you should be able to just uncomment existing
# example lines and adjust them to taste. The complete list of supported tools,
# and configuration instructions can be found at:
#
# http://boost.org/boost-build2/doc/html/bbv2/reference/tools.html
#
# This file uses Jam language syntax to describe available tools. Mostly,
# there are 'using' lines, that contain the name of the used tools, and
# parameters to pass to those tools -- where parameters are separated by
# semicolons. Important syntax notes:
#
# - Both ':' and ';' must be separated from other tokens by whitespace
# - The '\' symbol is a quote character, so when specifying Windows paths you
# should use '/' or '\' instead.
#
# More details about the syntax can be found at:
#
# http://boost.org/boost-build2/doc/html/bbv2/advanced.html#bbv2.advanced.jam_language
#
# ------------------
# GCC configuration.
# ------------------
# Configure gcc (default version).
# using gcc ;
# Configure specific gcc version, giving alternative name to use.
# using gcc : 3.2 : g++-3.2 ;
using gcc : 4.9 : C:\SysGCC\Raspberry\bin\arm-linux-gnueabihf-g++.exe : <ranlib>C:\SysGCC\Raspberry\bin\arm-linux-gnueabihf-ranlib.exe <archiver>C:\SysGCC\Raspberry\bin\arm-linux-gnueabihf-ar.exe ;
# -------------------
# MSVC configuration.
# -------------------
# Configure msvc (default version, searched for in standard locations and PATH).
# using msvc ;
# Configure specific msvc version (searched for in standard locations and PATH).
# using msvc : 8.0 ;
# ----------------------
# Borland configuration.
# ----------------------
# using borland ;
# ----------------------
# STLPort configuration.
# ----------------------
# Configure specifying location of STLPort headers. Libraries must be either
# not needed or available to the compiler by default.
# using stlport : : /usr/include/stlport ;
# Configure specifying location of both headers and libraries explicitly.
# using stlport : : /usr/include/stlport /usr/lib ;
# -----------------
# QT configuration.
# -----------------
# Configure assuming QTDIR gives the installation prefix.
# using qt ;
# Configure with an explicit installation prefix.
# using qt : /usr/opt/qt ;
# ---------------------
# Python configuration.
# ---------------------
# Configure specific Python version.
# using python : 3.1 : /usr/bin/python3 : /usr/include/python3.1 : /usr/lib ;
现在要使用 MinGW 创建 Boost.Build 并使用 SysGCC 构建 Boost,我 运行 在管理员命令提示符下执行这些命令:
cd C:\Boost.64.0
bootstrap.sh gcc --without-libraries=python,context,coroutine,coroutine2
b2 toolset=gcc-4.9 host-os=windows target-os=linux architecture=arm address-model=32 link=static runtime-link=shared threading=multi threadapi=pthread --build-type=complete --build-dir=boost-build --stagedir=stage
Bootstrap 运行良好(只是一些警告),但 b2 在配置后冻结(注意:使用 gcc 库):
notice: found boost-build.jam at C:/Boost/1.64.0/boost-build.jam
notice: loading Boost.Build from C:/Boost/1.64.0/tools/build/src
notice: Searching 'C:\WINDOWS' 'C:\Users\user' 'C:\Users\user' 'C:\Boost.64.0\tools/build/src' 'C:/Boost/1.64.0/tools/build/src/kernel' 'C:/Boost/1.64.0/tools/build/src/util' 'C:/Boost/1.64.0/tools/build/src/build' 'C:/Boost/1.64.0/tools/build/src/tools' 'C:/Boost/1.64.0/tools/build/src/contrib' 'C:/Boost/1.64.0/tools/build/src/.' for site-config configuration file 'site-config.jam'.
notice: Configuration file 'site-config.jam' not found in 'C:\WINDOWS' 'C:\Users\user' 'C:\Users\user' 'C:\Boost.64.0\tools/build/src' 'C:/Boost/1.64.0/tools/build/src/kernel' 'C:/Boost/1.64.0/tools/build/src/util' 'C:/Boost/1.64.0/tools/build/src/build' 'C:/Boost/1.64.0/tools/build/src/tools' 'C:/Boost/1.64.0/tools/build/src/contrib' 'C:/Boost/1.64.0/tools/build/src/.'.
notice: Searching 'C:\Users\user' 'C:\Users\user' 'C:\Boost.64.0\tools/build/src' 'C:/Boost/1.64.0/tools/build/src/kernel' 'C:/Boost/1.64.0/tools/build/src/util' 'C:/Boost/1.64.0/tools/build/src/build' 'C:/Boost/1.64.0/tools/build/src/tools' 'C:/Boost/1.64.0/tools/build/src/contrib' 'C:/Boost/1.64.0/tools/build/src/.' for user-config configuration file 'user-config.jam'.
notice: Loading user-config configuration file 'user-config.jam' from 'C:/Users/user'.
notice: will use 'C:\SysGCC\Raspberry\bin\arm-linux-gnueabihf-g++' for gcc, condition <toolset>gcc-arm
notice: using gcc libraries :: <toolset>gcc-arm :: C:\SysGCC\Raspberry/bin C:\SysGCC\Raspberry/lib C:\SysGCC\Raspberry/lib32 C:\SysGCC\Raspberry/lib64
有什么建议吗? :-)
显然自从 Boost 1.61 以来,对 Boost.Build 的一些更改在 windows 上进行交叉编译时破坏了 Cygwin 路径解析,如 this票.
一个可能的解决方案(票证中的解决方法)是修补 cygwin.jam 文件在 tools\build\src\ 文件夹中。只需将第 63 行从
if $(head) = /
到
if $(head) = "/" || [ MATCH "^([a-zA-Z]:/)$" : $(head) ]
现在 b2 运行没有问题。 :-)
我目前正在尝试在 Windows 7(64 位) 上交叉编译 Boost 1.64.0 Raspberry Pi (运行 Jessie) 使用 Raspberry SysGCC 4.9.2 Toolchain and MinGW 6.3.0.
我把所有东西安装到以下目录:
- 提升至 C:\Boost.64.0
- SysGCC 到 C:\SysGCC\Raspberry
- MinGW 到 C:\MinGW.3.0
将 SysGCC 和 MinGW 的 bin 文件夹添加到全局 PATH 变量中:
- C:\SysGCC\Raspberry\bin
- C:\MinGW.3.0\mingw32\bin
并在我的主目录中创建了一个 user-config.jam(见 GCC 配置):
# Copyright 2003, 2005 Douglas Gregor
# Copyright 2004 John Maddock
# Copyright 2002, 2003, 2004, 2007 Vladimir Prus
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
# This file is used to configure your Boost.Build installation. You can modify
# this file in place, or you can place it in a permanent location so that it
# does not get overwritten should you get a new version of Boost.Build. See:
#
# http://www.boost.org/boost-build2/doc/html/bbv2/overview/configuration.html
#
# for documentation about possible permanent locations.
# This file specifies which toolsets (C++ compilers), libraries, and other
# tools are available. Often, you should be able to just uncomment existing
# example lines and adjust them to taste. The complete list of supported tools,
# and configuration instructions can be found at:
#
# http://boost.org/boost-build2/doc/html/bbv2/reference/tools.html
#
# This file uses Jam language syntax to describe available tools. Mostly,
# there are 'using' lines, that contain the name of the used tools, and
# parameters to pass to those tools -- where parameters are separated by
# semicolons. Important syntax notes:
#
# - Both ':' and ';' must be separated from other tokens by whitespace
# - The '\' symbol is a quote character, so when specifying Windows paths you
# should use '/' or '\' instead.
#
# More details about the syntax can be found at:
#
# http://boost.org/boost-build2/doc/html/bbv2/advanced.html#bbv2.advanced.jam_language
#
# ------------------
# GCC configuration.
# ------------------
# Configure gcc (default version).
# using gcc ;
# Configure specific gcc version, giving alternative name to use.
# using gcc : 3.2 : g++-3.2 ;
using gcc : 4.9 : C:\SysGCC\Raspberry\bin\arm-linux-gnueabihf-g++.exe : <ranlib>C:\SysGCC\Raspberry\bin\arm-linux-gnueabihf-ranlib.exe <archiver>C:\SysGCC\Raspberry\bin\arm-linux-gnueabihf-ar.exe ;
# -------------------
# MSVC configuration.
# -------------------
# Configure msvc (default version, searched for in standard locations and PATH).
# using msvc ;
# Configure specific msvc version (searched for in standard locations and PATH).
# using msvc : 8.0 ;
# ----------------------
# Borland configuration.
# ----------------------
# using borland ;
# ----------------------
# STLPort configuration.
# ----------------------
# Configure specifying location of STLPort headers. Libraries must be either
# not needed or available to the compiler by default.
# using stlport : : /usr/include/stlport ;
# Configure specifying location of both headers and libraries explicitly.
# using stlport : : /usr/include/stlport /usr/lib ;
# -----------------
# QT configuration.
# -----------------
# Configure assuming QTDIR gives the installation prefix.
# using qt ;
# Configure with an explicit installation prefix.
# using qt : /usr/opt/qt ;
# ---------------------
# Python configuration.
# ---------------------
# Configure specific Python version.
# using python : 3.1 : /usr/bin/python3 : /usr/include/python3.1 : /usr/lib ;
现在要使用 MinGW 创建 Boost.Build 并使用 SysGCC 构建 Boost,我 运行 在管理员命令提示符下执行这些命令:
cd C:\Boost.64.0
bootstrap.sh gcc --without-libraries=python,context,coroutine,coroutine2
b2 toolset=gcc-4.9 host-os=windows target-os=linux architecture=arm address-model=32 link=static runtime-link=shared threading=multi threadapi=pthread --build-type=complete --build-dir=boost-build --stagedir=stage
Bootstrap 运行良好(只是一些警告),但 b2 在配置后冻结(注意:使用 gcc 库):
notice: found boost-build.jam at C:/Boost/1.64.0/boost-build.jam
notice: loading Boost.Build from C:/Boost/1.64.0/tools/build/src
notice: Searching 'C:\WINDOWS' 'C:\Users\user' 'C:\Users\user' 'C:\Boost.64.0\tools/build/src' 'C:/Boost/1.64.0/tools/build/src/kernel' 'C:/Boost/1.64.0/tools/build/src/util' 'C:/Boost/1.64.0/tools/build/src/build' 'C:/Boost/1.64.0/tools/build/src/tools' 'C:/Boost/1.64.0/tools/build/src/contrib' 'C:/Boost/1.64.0/tools/build/src/.' for site-config configuration file 'site-config.jam'.
notice: Configuration file 'site-config.jam' not found in 'C:\WINDOWS' 'C:\Users\user' 'C:\Users\user' 'C:\Boost.64.0\tools/build/src' 'C:/Boost/1.64.0/tools/build/src/kernel' 'C:/Boost/1.64.0/tools/build/src/util' 'C:/Boost/1.64.0/tools/build/src/build' 'C:/Boost/1.64.0/tools/build/src/tools' 'C:/Boost/1.64.0/tools/build/src/contrib' 'C:/Boost/1.64.0/tools/build/src/.'.
notice: Searching 'C:\Users\user' 'C:\Users\user' 'C:\Boost.64.0\tools/build/src' 'C:/Boost/1.64.0/tools/build/src/kernel' 'C:/Boost/1.64.0/tools/build/src/util' 'C:/Boost/1.64.0/tools/build/src/build' 'C:/Boost/1.64.0/tools/build/src/tools' 'C:/Boost/1.64.0/tools/build/src/contrib' 'C:/Boost/1.64.0/tools/build/src/.' for user-config configuration file 'user-config.jam'.
notice: Loading user-config configuration file 'user-config.jam' from 'C:/Users/user'.
notice: will use 'C:\SysGCC\Raspberry\bin\arm-linux-gnueabihf-g++' for gcc, condition <toolset>gcc-arm
notice: using gcc libraries :: <toolset>gcc-arm :: C:\SysGCC\Raspberry/bin C:\SysGCC\Raspberry/lib C:\SysGCC\Raspberry/lib32 C:\SysGCC\Raspberry/lib64
有什么建议吗? :-)
显然自从 Boost 1.61 以来,对 Boost.Build 的一些更改在 windows 上进行交叉编译时破坏了 Cygwin 路径解析,如 this票.
一个可能的解决方案(票证中的解决方法)是修补 cygwin.jam 文件在 tools\build\src\ 文件夹中。只需将第 63 行从
if $(head) = /
到
if $(head) = "/" || [ MATCH "^([a-zA-Z]:/)$" : $(head) ]
现在 b2 运行没有问题。 :-)