2013-04-12 3 views
2

Я создал свой собственный libC++, и я обычно включаю его с -I /path/to/lib/include -L /path/to/lib/lib. Но теперь мне нужно поделиться проектом с кем-то еще с Mac, и я хочу передать им Makefile ™, который «просто работает» ®.Где находится libC++ на OS X?

Рассмотрим следующую программу:

#include <algorithm> 
#include <iostream> 
#include <vector> 
using namespace std; 
int main(void) 
{ 
    uint32_t nums[100]; 

    for (size_t i = 0; i < 10; ++i) 
    { 
     nums[i] = 666; 
    } 

    vector<int> hello{1, 2, 3, 4, 5, 6, 7, 8}; 
    for_each(hello.begin(), hello.end(), [](int tal) 
    { 
     cout << tal << endl; 
    }); 
} 

Когда я скомпилировать его с clang++ -o test test.cc я, естественно, получить ошибки, которые относятся к пропуску -std=c++11 флаг. Итак, давайте добавим его clang++ -std=c++11 -o test test.cc. Это дает несколько ошибок, один из которых -

test.cc:15:17: error: no matching constructor for initialization of 'vector<int>' 
vector<int> hello{1, 2, 3, 4, 5, 6, 7, 8}; 

Хорошо, мне нужна C++ 11-совместимая библиотека C++.

clang++ -std=c++11 -stdlib=libc++ -o test test.cc 
test.cc:1:10: fatal error: 'algorithm' file not found 
#include <algorithm> 

Мое решение это было использовать -I и -L указывая на мой вручную скомпилированы LibC++.

Предполагая, что человек, которому я поделюсь этим, не имеет этого, но имеет как минимум XCode. Что я могу сделать, чтобы сделать код выше? Разумеется, OS X должна поставляться с возможностями C++ 11 ???

[EDIT]

Оказывается, что с тех пор как я установил LLVM с Xcode из homwbrew, что лязг отображались, когда я сделал which clang. Я предположил, что clang из homebrew не получит символическую связь в /usr/local/bin, но, судя по всему, это произошло. Поэтому я думаю, что урок, который был извлечен (как это было много раз раньше), никогда не предполагает, но RTFM!

+0

Зависит от версии OSX относительно того, поддерживает ли libstdC++ поддержку некоторых из C++ 11. Я не думаю, что все функции доступны, хотя и в последней версии. –

+0

Этот код легко компилируется на последнем XCode (4.6.1) на Mountain Lion (clang-425.0.27), когда установлены инструменты командной строки. – Petesh

+0

@Petesh Weird, у меня есть Mountain Lion, новая установка от 2 дней назад и последняя версия XCode с установленными инструментами командной строки .... Какие флаги вы проходите, чтобы их собрать? – evading

ответ

5

Последние выпуски Xcode помещают как заголовки clang, так и libC++ внутри Xcode.app. Control щелкните по нему и выберите «Показать содержимое пакета», чтобы перейти в этот каталог.

Убедитесь, что командная строка лязг тот же один, что находится внутри вашего Xcode.app:

$ which clang++ 

Для меня:

/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/clang++ 

и:

/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/lib/c++/v1 
+0

Это сделало трюк! Я должен был знать, что делать, что clang' ... Оказалось, что мой доморощенный clang был тот, который появился. Использование clang изнутри Xcode.app ... решило его. Благодаря! – evading

0

OS X EI Capitan 10.11.6 (15G1004)

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ 
Смежные вопросы