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 フル スピード オフ リリース

エラー: 削除されたプロパティ: on off off on debug

/cygdrive/c/boost_1_51_0/tools/build/v2/build/virtual-target.jam:490: モジュール object(file-target)@1014 からの actualize-no-scanner 内

/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: モジュール build-system からロード中

/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: モジュールからのブーストビルド内

/cygdrive/c/boost_1_51_0/boost-build.jam:17: モジュールからのモジュール スコープ内

4

1 に答える 1

13

エラー メッセージは完全ではありませんが、これはオペレータ エラーです。デフォルトでは、ビルドはライブラリのシステム命名を使用します。これは、一般的な Unix システムで使用する命名です。つまり、デバッグ バリアントとリリース バリアントの両方をビルドしようとすると、名前の衝突が発生します。

コマンドラインに--layout=taggedorを追加すると、うまくいくはずです。--layout=versionedトップディレクトリから「./b2 --help」を実行すると、これらの意味についての説明が得られます。

于 2012-08-29T08:01:40.403 に答える