使用Cygwin/GCC构建Boost库时的名称冲突

Rob*_*ner 7 c++ gcc boost cygwin

我正在将C++应用程序从VC++迁移到GCC(使用Cygwin在Windows上运行).我现在的第一个问题是我无法构建Boost库.

例如,用VC++构建Boost.Exception我会写:

b2 --with-exception variant=debug,release link=static runtime-link=static
Run Code Online (Sandbox Code Playgroud)

我会在stage\lib目录中获取文件libboost_exception-vc100-mt-s-1_51.lib和libboost_exception-vc100-mt-sgd-1_51.lib.

然而,当我尝试使用GCC形成一个Cygwin终端时,我得到错误.我发现只构建调试(或只发布)这样有效:

./b2 --with-exception variant=debug link=static runtime-link=static
Run Code Online (Sandbox Code Playgroud)

它在我的stage\lib目录中为两种情况(调试和发布)创建了libboost_exception.a.因此,似乎存在名称冲突(调试和发布变体的名称相同).这是boost构建系统中的错误还是我做错了什么?


编辑:

的输出

./b2 --with-exception variant=debug,release link=static runtime-link=static
Run Code Online (Sandbox Code Playgroud)

是:

构建Boost C++库.

/cygdrive/c/boost_1_51_0/tools/build/v2/build/virtual-target.jam:1079:来自模块虚拟目标的virtual-target.register-actual-name

错误:实际目标的重复名称:libboost_exception.a

错误:以前的虚拟目标{common%common.copy-libboost_exception.a.STATIC_LIB {gcc%gcc.archive-libboost_exception.a.STATIC_LIB {gcc%gcc.compile.c ++ - clone_current_exception_non_intrusive.o.OBJ {clone_current_exception_non_intrusive.cpp.CPP} }}}

错误:从./stage-proper错误创建:另一个虚拟目标{common%common.copy-libboost_exception.a.STATIC_LIB {gcc%gcc.archive-libboost_exception.a.STATIC_LIB {gcc%gcc.compile.c ++ - clone_current_exception_non_intrusive.o .OBJ {clone_current_exception_non_intrusive.cpp.CPP}}}}

错误:从./stage-proper创建

错误:添加属性:关闭NDEBUG全速关闭释放

错误:删除属性:关闭调试时关闭

/cygdrive/c/boost_1_51_0/tools/build/v2/build/virtual-target.jam:490:在模块对象(文件目标)的实现 - 无扫描程序中@ 1014

/cygdrive/c/boost_1_51_0/tools/build/v2/build/virtual-target.jam:135:在object(file-target)@1014.actualize from module object(file-target)@ 1014

/cygdrive/c/boost_1_51_0/tools/build/v2/build-system.jam:749:从模块构建系统加载

/cygdrive/c/boost_1_51_0/tools/build/v2/kernel/modules.jam:283:从模块模块导入

/cygdrive/c/boost_1_51_0/tools/build/v2/kernel/bootstrap.jam:142:来自模块的boost-build

/cygdrive/c/boost_1_51_0/boost-build.jam:17:模块范围内的模块

Vla*_*rus 13

尽管错误消息并不完美,但这是操作员错误.默认情况下,构建使用库的系统命名 - 您在典型的Unix系统上的命名.所以,是的,如果你尝试构建调试和发布变体,你会得到命名冲突.

如果添加--layout=tagged或添加--layout=versioned到命令行,事情应该有效.你可以从顶层目录运行"./b2 --help"来获得这些意思的一些解释.