Как скомпилировать 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, и если вам удастся заставить его работать, пожалуйста, дайте мне знать.

Другие вопросы по тегам