7

我正在将 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 。

但是,当我从 Cygwin 终端使用 GCC 尝试相同的操作时,我得到了错误。我发现像这样构建仅调试(或仅发布)有效:

./b2 --with-exception variant=debug link=static runtime-link=static

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


编辑:

的输出

./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 的 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: 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:在模块范围内

4

1 回答 1

13

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

如果你添加--layout=tagged--layout=versioned到你的命令行,事情应该会奏效。您可以从顶层目录运行“./b2 --help”以获得对这些含义的一些解释。

于 2012-08-29T08:01:40.403 回答