如何使用GCC-MP-4.7在OS X上编译ASL?

时间:2012-06-21 18:28:23

标签: c++ gcc clang asl

我在尝试在运行Lion的Mac上编译Adobe Source Libraries (ASL)时遇到各种麻烦。我正在使用MacPorts GCC-4.7(我喜欢C ++ 11)。

我通过更改url指向downloads.sourceforge.net下载并编辑了asl_1.0.43_net_setup.sh。

我告诉bjam使用我的gcc并通过编辑〜/ user-config.jam传递-std = c ++ 11标志:

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:错误:您选择的CPU不支持x86-64指令集

即使我告诉它使用64位,bjam(愚蠢地)似乎设置-march = i486并导致上述问题。理想情况下,ASL可以使用我现有的已安装的boost和TBB进行编译,而无需构建自定义版本。

到目前为止,我已经花了几个小时准备好了。它似乎有这么多的承诺,但构建系统是不灵活的(这就是为什么我不使用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

[编辑]嗯,这实际上看起来像adobe代码中的一个错误,g ++过去常常是允许的,但不再是。叹了口气,现在看来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

1 个答案:

答案 0 :(得分:0)

我已经放弃了试图找出bjam引入的所有复杂性。

相反,我已经开始在ASL的github上使用cmake,gcc-47和clang-3.2构建一个fork。我在代码中做了一些小修复,并且其中一个目录在没有警告的情况下编译。

https://github.com/tfiner/adobe_asl

[编辑]经过几个小时的汗水,我终于有两个闪亮的库由clang 3.2使用boost 1.49,TBB 4.0和OS X 10.6构建。随意从github克隆它,如果你设法让它工作,请告诉我。