Cross-Compiling Boost on Windows for Raspberry Pi using SysGCC Toolchain and MinGW

会有一股神秘感。 提交于 2021-01-28 07:39:39

问题


I currently trying to cross-compile Boost 1.64.0 on Windows 7 (64bit) for the Raspberry Pi (running Jessie) using the Raspberry SysGCC 4.9.2 Toolchain and MinGW 6.3.0.

I installed everything to the following directories:

  • Boost to C:\Boost\1.64.0
  • SysGCC to C:\SysGCC\Raspberry
  • MinGW to C:\MinGW\6.3.0

Added the bin folders of SysGCC and MinGW to the global PATH variable:

  • C:\SysGCC\Raspberry\bin
  • C:\MinGW\6.3.0\mingw32\bin

And created a user-config.jam with the following content in my home directory (see GCC configuration):

# 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 ;

Now to create Boost.Build with MinGW and build Boost with SysGCC i'm running these commands in a administrator command prompt:

cd C:\Boost\1.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 runs fine (just some warnings), but b2 freezes after configuration (notice: using gcc libraries):

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\1.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\1.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\1.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

Any suggestions? :-)


回答1:


Apparently since Boost 1.61 some changes to Boost.Build are breaking the Cygwin path resolution while cross-compiling on windows as described in this ticket.

One possible solution (workaround from the ticket) is to patch the cygwin.jam file inside tools\build\src\ folder. Just change line 63 from

if $(head) = / 

to

if $(head) = "/" || [ MATCH  "^([a-zA-Z]:/)$" : $(head) ]

Now b2 runs without a problem. :-)



来源:https://stackoverflow.com/questions/43574295/cross-compiling-boost-on-windows-for-raspberry-pi-using-sysgcc-toolchain-and-min

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!