【问题标题】:Unable to build Boost libraries with GCC无法使用 GCC 构建 Boost 库
【发布时间】:2011-07-15 01:01:35
【问题描述】:

我使用的是 Windows 7 64 位,并且想从命令行编译非预编译库(具体来说,我需要文件系统)(我不使用 MSVC)。我有 MinGW,但在 Boost 网站上看到不支持 MSYS shell,所以我尝试从 Windows 命令提示符编译库。

首先,运行bootstrap.bat会出现如下错误:

Building Boost.Jam build engine 
'cl' is not recognized as an internal or external command, 
operable program or batch file. 

Failed to build Boost.Jam build engine. 
Please consult bjam.log for furter diagnostics. 

You can try to obtain a prebuilt binary from 

   http://sf.net/project/showfiles.php?group_id=7586&package_id=72941

Also, you can file an issue at http://svn.boost.org
Please attach bjam.log in that case. 

另外,在 boost_root 目录的任何地方都没有 bjam.log 文件。

忽略此错误,并尝试运行下载的 bjam.exe 文件,我收到另一个错误:

c:/boost_1_45_0/tools/build/v2/build\configure.jam:145: in builds-raw
*** argument error
* rule UPDATE_NOW ( targets * : log ? : ignore-minus-n ? )
* called with: ( <pbin.v2\libs\regex\build\gcc-mingw-4.5.2\debug\address-model64\architecture-x86>has_icu.exe :  : ignore-minus-n : ignore-minus-q )
* extra argument ignore-minus-q
(builtin):see definition of rule 'UPDATE_NOW' being called
c:/boost_1_45_0/tools/build/v2/build\configure.jam:179: in configu
re.builds
c:/boost_1_45_0/tools/build/v2/build\configure.jam:216: in object(
check-target-builds-worker)@409.check

等等。有很多抱怨。设置“架构”和“地址模型”选项没有帮助。

有什么建议吗?

@安德烈

按照 Andre 的建议,我创建了 minGW-bjam,它运行了一个半小时并构建了大部分库,但不是我目前需要的:文件系统。 尝试仅编译文件系统,使用 define="BOOST_FILESYSTEM_VERSION=2"--disable-filesystem3 指定版本 2 无济于事。我收到以下错误:

gcc.compile.c++ bin.v2\libs\filesystem\build\gcc-mingw-4.5.2\debug\v3\src\operations.o
In file included from ./boost/filesystem/v3/operations.hpp:24:0,
             from libs\filesystem\v3\src\operations.cpp:48:
./boost/filesystem/v3/config.hpp:16:5: error: #error Compiling Filesystem version 3 
file with BOOST_FILESYSTEM_VERSION defined != 3
libs\filesystem\v3\src\operations.cpp:647:26: warning: 
'<unnamed>::create_symbolic_link_api' defined but not used

"g++"  -ftemplate-depth-128 -O0 -fno-inline -Wall -g -DBOOST_ALL_NO_LIB=1 -
DBOOST_FILESYSTEM_DYN_LINK=1 -DBOOST_FILESYSTEM_VERSION=2 -DBOOST_SYSTEM_DYN_LINK=1  -
I"." -c -o "bin.v2\libs\filesystem\build\gcc-mingw-4.5.2\debug\v3\src\operations.o"  
"libs\filesystem\v3\src\operations.cpp"

等等。有很多...failed 声明。

这里有什么提示吗?

【问题讨论】:

    标签: gcc boost bjam


    【解决方案1】:

    这很容易。只需使用“bootstrap.bat gcc”来选择 GCC

    【讨论】:

    • 有效,但需要将“C:\MinGW\bin”放入Windows的PATH环境变量中并提前重启,否则gcc命令未知。
    【解决方案2】:

    引导脚本假定 msvc 编译器可用。但是您可以在没有引导脚本的情况下手动构建 bjam:

    进入 tools\build\v2\engine\src 目录并调用“build.bat mingw”。它将创建一个 bjam.exe。然后你可以把它放在你的 %PATH% 或者 root boost 目录中......

    说实话,我通常用 msvc 编译器这样构建 bjam,并使用这个“msvc-bjam”来构建我的 mingw boost 库。

    【讨论】:

    • 嗨,安德烈,非常感谢。做到了,尽管 bjam.exe 不适用于 64 位特定标志。干杯!
    • 刚刚将 MinGW64 用于 64 位特定的东西。 Bjam 使用最新版本。
    • 现在 (boost v1.63) 目录是 \tools\build\src\engine。命令是 build.bat gcc。 bjam.exe 和 b2.exe 在 \tools\build\src\engine\bin.ntx86
    【解决方案3】:

    所以...问题的第一部分由安德烈的建议解决了。 第二部分通过将变量 BOOST_FILESYSTEM_VERSION 设置为 3 来解决(上面的错误抱怨与文件user.hpp 中设置的内容不兼容)。虽然这不是我正在使用的 Boost 1.45 的默认选项,但它是唯一有效的(即 bjam 无论如何都想编译版本 3)。所以现在我有文件系统库的第 3 版,其他所有的第 2 版,但目前这似乎不是问题。

    我确实在将 Boost 与 OpenCV 和 Eigen 库一起使用时遇到了问题,不过……继续下一个挑战;)

    【讨论】:

      【解决方案4】:

      由于我还不能评论,我想补充一下我跑了

      引导 mingw

      正确生成b2然后

      b2 --build-dir="c:\boost_release" 工具集=gcc --build-type=complete "c:\boost_release\stage"

      包含将位于您的 boost 根文件夹 (boost_1_58_00/boost) 和您的二进制文件位于指定的构建文件夹中。

      【讨论】:

        猜你喜欢
        • 2014-04-10
        • 2011-11-30
        • 2014-11-21
        • 2012-08-23
        • 1970-01-01
        • 2020-03-25
        • 2011-07-17
        • 2012-05-26
        • 1970-01-01
        相关资源
        最近更新 更多