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

时间:2012-08-28 14:02:01

标签: c++ gcc boost cygwin

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

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

b2 --with-exception variant=debug,release link=static runtime-link=static

我会在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

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


修改

的输出
./b2 --with-exception variant=debug,release link=static runtime-link=static

是:

  

构建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全速关闭释放

     

错误:删除了属性:on on off on debug

     

/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:in 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:来自模块的模块范围

1 个答案:

答案 0 :(得分:13)

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

如果您在命令行中添加--layout=tagged--layout=versioned,则应该可以正常运行。你可以从顶层目录运行“./b2 --help”来获得这些平均值的一些解释。