Lion を実行している Mac でAdobe Source Libraries (ASL)をコンパイルしようとすると、さまざまな問題が発生します。MacPorts GCC-4.7 を使用しています (C++11 が好きです)。
ダウンロードして、url を downloads.sourceforge.net を指すように変更して、asl_1.0.43_net_setup.sh を編集しました。
~/user-config.jam を編集して、gcc を使用し、-std=c++11 フラグを渡すように bjam に指示しました。
import toolset : using ; using darwin ;
using gcc
: 47
: g++-mp-4.7
: <cxxflags>"-std=c++11"
;
bjam に 64 ビット バージョンを作成するように指示するフラグを使用してビルドします: bjam toolset=gcc-47 -j 4 address-model=64 architecture=x86
次のエラー メッセージが表示され続けます (複数回): documentation/examples/namespace.cpp:1:0: error: CPU you selected does not support x86-64 instruction set
64 ビットを使用するように指示したにもかかわらず、bjam は (ばかげて) -march=i486 を設定しているようで、上記の問題を引き起こしています。理想的には、カスタム バージョンをビルドせずに、既存のインストール済みブーストと TBB を使用して ASL をコンパイルできます。
これまでにすでに数時間を費やしており、それをチャックする準備ができています。これには多くの可能性があるように見えますが、ビルド システムには柔軟性がありません (これが、私が jam や bjam を使用しない理由です)。
誰もがclangまたはGCCのいずれかを使用して最新のMacでこれを構築するためのヒントを持っていますか? (GCC: XCode に付属するバージョンではありません)。
[編集] i486 ビットを見つけて削除しました。現在、C++11 コンパイラでのコンパイルに問題があると思われる問題が発生しています。
./adobe/closed_hash.hpp:691:88: error: 'insert' was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
./adobe/closed_hash.hpp:691:88: note: declarations in dependent base 'adobe::version_1::closed_hash_set<adobe::pair<adobe::version_1::name_t, adobe::version_1::any_regular_t>, adobe::get_element<0, adobe::pair<adobe::version_1::name_t, adobe::version_1::any_regular_t> >, boost::hash<adobe::version_1::name_t>, std::equal_to<adobe::version_1::name_t>, adobe::version_1::capture_allocator<adobe::pair<adobe::version_1::name_t, adobe::version_1::any_regular_t> > >' are not found by unqualified lookup
./adobe/closed_hash.hpp:691:88: note: use 'this->insert' instead
[編集] うーん、実際には、g++ が許容していた adobe コードのバグのように見えますが、現在はそうではありません。ASL は最新の (ほぼ) C++11 準拠のコンパイラに対してコンパイルされていないようです。
今、adobe スクリプトがダウンロードしたバージョンの boost にコンパイルの問題が見られます (シグナル ライブラリには明らかに一部の移動コンストラクターにバグがあり、GCC はそれを訴えています):
../boost_libraries/boost/smart_ptr/shared_ptr.hpp:168:25: note: 'boost::shared_ptr<boost::signals::detail::basic_connection>::shared_ptr(const boost::shared_ptr<boost::signals::detail::basic_connection>&)' is implicitly declared as deleted because 'boost::shared_ptr<boost::signals::detail::basic_connection>' declares a move constructor or move assignment operator