Как скомпилировать ASL на OS X с помощью GCC-MP-4.7?
У меня много проблем с попыткой скомпилировать Adobe Source Libraries (ASL) на Mac под управлением Lion. Я использую MacPorts GCC-4.7 (мне нравится C++11).
Я скачал и отредактировал asl_1.0.43_net_setup.sh, изменив URL-адрес, чтобы он указывал на downloads.sourceforge.net.
Я сказал bjam использовать мой gcc и передать ему флаги -std= C++ 11, отредактировав ~/user-config.jam:
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 архитектура =x86
Я получаю сообщение об ошибке (несколько раз): documents /examples/namespace.cpp:1:0: ошибка: выбранный вами ЦП не поддерживает набор инструкций x86-64
Несмотря на то, что я сказал использовать 64-битную версию, bjam (тупо), кажется, устанавливает -march=i486 и вызывает вышеуказанную проблему. В идеале ASL может компилироваться с использованием моего существующего установленного надстройки и TBB без создания пользовательских версий.
Я уже провел несколько часов, и я собираюсь бросить это. Вроде бы так много обещаний, но система сборки негибкая (вот почему я не использую jam или bjam).
У кого-нибудь есть советы по созданию этой вещи на современном Mac с использованием Clang или GCC? (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
[править] Хм, это на самом деле похоже на ошибку в Adobe Code, к которой раньше относился g++, но больше ее нет. Вздох, теперь похоже, что ASL не был скомпилирован ни с одним современным (в основном) совместимым компилятором C++ 11.
Теперь я вижу проблемы компиляции в версии 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
1 ответ
Я бросил пытаться выяснить все сложности, представленные bjam.
Вместо этого я запустил github из ASL, который я создаю с помощью cmake, gcc-47 и clang-3.2. Я сделал несколько небольших исправлений в коде, и одна из директорий компилируется без предупреждения.
https://github.com/tfiner/adobe_asl
[править] После нескольких часов пота у меня наконец есть две блестящие библиотеки, созданные clang 3.2 с использованием boost 1.49, TBB 4.0 и OS X 10.6. Не стесняйтесь клонировать его из github, и если вам удастся заставить его работать, пожалуйста, дайте мне знать.