13

我正在使用 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,它运行了一个半小时并构建了大部分库,但不是我现在需要的:Filesystem。试图只编译文件系统,指定版本 2define="BOOST_FILESYSTEM_VERSION=2"--disable-filesystem3没有帮助。我收到以下错误:

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陈述。

这里有什么提示吗?

4

4 回答 4

29

这简单。只需使用“bootstrap.bat gcc”来选择 GCC

于 2011-12-22T11:24:13.177 回答
9

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

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

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

于 2011-03-14T14:04:13.293 回答
2

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

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

于 2011-03-15T13:00:19.640 回答
0

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

引导 mingw

正确生成 b2 然后

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

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

于 2015-05-22T13:58:04.450 回答