Как я могу получить поддержку библиотеки C++11 с помощью компилятора Intel в Mac OSX?

Я хочу перенести довольно большое и все еще растущее приложение C++ с ПК на Mac и продолжать поддерживать параллельную разработку на обеих платформах. На ПК мы используем MSVC2010 и внедряем несколько функций C++11. На Mac мы используем XCode 4.0.2. Чтобы улучшить зависимость от платформы и поддержать встроенную сборку, которую мы используем, мы развертываем компилятор Intel в обоих случаях. Однако компилятор не поставляется с библиотекой, поэтому мы полагаемся на те, что поставляются поставщиками. На Mac это означает отсутствие поддержки библиотеки C++11 для функций, которые мы очень хотим использовать, таких как std::forward и так далее. Я не могу собрать libc++ с компилятором Intel на Mac, иначе мои проблемы будут решены. Есть ли способ обойти это, кроме как использовать наши собственные библиотеки?


person hatcat    schedule 24.08.2011    source источник
comment
Установите виртуальную машину и запустите простой дистрибутив Linux, такой как сервер Ubuntu (что позволит вам пропустить X11, графический интерфейс и т. д.). У них, как правило, есть текущие версии g++, которые близки к окончательным проектам того, что сейчас называется C++11.   -  person Dirk Eddelbuettel    schedule 24.08.2011
comment
Что вы имеете в виду на Mac, что означает поддержку библиотеки С++ 11? Я не буду ручаться за std::forward в частности, но clang (компилятор C++ llvm) поддерживает многие функции C++11 и поставляется с Xcode 4.x.   -  person Richard    schedule 24.08.2011
comment
Дирк: Чтобы было ясно, это коммерческое приложение. Он должен работать на OSX. Если вы можете добиться этого, не создавая OSX, я весь в ушах. Ричард: libc++ действительно может быть собран с помощью Clang и предлагает обширную поддержку C++11. Однако libc++ нельзя собрать с помощью компилятора Intel (если только кто-нибудь не покажет мне, как это сделать?). Я бы с радостью пролистал библиотеку, чтобы исправить ошибки компилятора Intel, но мои работодатели могут быть немного сварливы, если это займет больше времени, чем, по сути, наша собственная поддержка конструкторов перемещения и операторов присваивания.   -  person hatcat    schedule 25.08.2011


Ответы (2)


Если вы действительно не можете переключиться на другой компилятор на Mac, я бы посоветовал связаться со службой поддержки пользователей Intel, чтобы сообщить им, что поддержка C++11 важна для вас, и спросить их, насколько активно они внедряют ее теперь, когда новый язык является стандартом ISO.

Вполне возможно, что они также могут знать о работающей библиотеке.

person Clare Macrae    schedule 12.09.2011

Clang и Intel 15 поддерживают C++11 на Mac и Linux. Официальные веб-сайты описывают состояние функций C++11 в Clang и компиляторы Intel.

На Mac компилятор Intel использует системную библиотеку C++, которая предположительно связана с включенным набором инструментов Clang/LLVM.

$ otool -L threads
threads:
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

Программа threads может быть любой программой, которая вызывает вызов std::thread, например

#include <thread>

int main()
{
    std::thread::id id;
}
person Jeff Hammond    schedule 22.03.2015
comment
Нужна цитата. В частности, вам нужно указать, какая стандартная библиотека будет использоваться ICC. - person Potatoswatter; 22.03.2015
comment
Я не знаю, как процитировать собственное оригинальное исследование по этой теме, т.е. проверка таких кодов, как github.com/jeffhammond/HPCInfo/ blob/master/c%2B%2B11/ отлично работает с Intel 15. - person Jeff Hammond; 23.03.2015
comment
Пожалуйста, удалите свой отрицательный голос сейчас, так как я процитировал именно то, что вы просили. - person Jeff Hammond; 23.03.2015
comment
Да, libc++ — это стандартная библиотека Clang. Спасибо! (Кстати, этот сайт предпочитает описание воспроизводимого процесса цитированию. Так что вы можете сказать icc - < (echo '#include <iostream>'; echo 'int main() { std::cout << "hi\n"; }'); otool -L a.out, если это работает. Или, не предоставляя инструкций, просто упомяните, что вы скомпилировали программу и использовали otool. На SO много ленивых ответов , так что просто постарайтесь не выглядеть так.) - person Potatoswatter; 24.03.2015