我正在将 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:在模块范围内