встраивается в xcode 4.6, но не работает с помощью командной строки

Когда я запускаю следующий фрагмент кода из Xcode4.6, он компилируется и работает нормально. Но когда я пытаюсь скомпилировать его с помощью инструмента командной строки (clang ++), это не удается.

#include <iostream>
#include <memory>

int main(int argc, const char * argv[])
{

std::unique_ptr<int> foo(new int(0));

// insert code here...
std::cout << "Hello, this is cool giri World!\n";
return 0;
}

Вот журнал компиляции:

$ clang - версия
Apple LLVM версии 4.2 (clang-425.0.24) (на основе LLVM 3.2svn)
Цель: x86_64-apple-darwin12.2.0
Модель потока: posix

$ clang ++ main.cpp -stdlib = libc ++ -I /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1/ -I /usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/include/
main.cpp: 7: 10: ошибка: нет члена с именем «unique_ptr» в пространстве имен «std»
std :: unique_ptr foo (new int (0));
~~~~~ ^
main.cpp: 7: 24: ошибка: ожидается '(' для приведения типа функции или построения типа
std :: unique_ptr foo (new int (0));
~~~ ^
main.cpp: 7: 26: ошибка: использование необъявленного идентификатора 'foo'
std :: unique_ptr foo (new int (0));
^
Сгенерировано 3 ошибки.

3

Решение

Вы можете сами посмотреть, какая командная строка Xcode используется.

  1. Создайте свой проект в Xcode.
  2. Переключиться на просмотр журнала. Иконка для него выглядит как речевой пузырь с парой строк.
  3. Нажмите на последнюю сборку.
  4. Список этапов сборки будет отображаться в основной области редактирования. Щелкните правой кнопкой мыши «Compile main.cpp» и выберите «Копировать стенограмму для показанных результатов».
  5. Вставьте это в ваш любимый текстовый редактор, чтобы увидеть точную командную строку, которую XCode использовал для создания вашего проекта.
1

Другие решения

Попробуйте использовать собственную стандартную библиотеку clang:

clang -std=c++11 -stdlib=libc++ main.cpp

По умолчанию используется стандартная библиотека GNU (libstdc++), но версия Apple довольно старая и не поддерживает C ++ 11.

2

Убедитесь, что вы вызываете clang++не clang, как для компилятора а также линкер.

clang++ (как компилятор) нуждается в -std=c++11 а также -stdlib=libc++ компилятор флаги и clang++ (как компоновщик) нуждается в -stdlib=libc++ линкер флаг.

0

Спасибо всем, кто предложил мне решения, которые поддерживали меня.

Наконец это то, что сработало для меня.

Я удалил инструменты командной строки, используя сценарий оболочки, упомянутый в http://www.cocoanetics.com/2012/07/you-dont-need-the-xcode-command-line-tools/
а затем использовал
$ xcode-select -switch /Applications/Xcode.app/Contents/Developer/
установить версию xcode. и, наконец, использовал
$ xcrun clang ++ main1.cpp -stdlib = libc ++

скомпилировать мой код.

Это работало нормально. Спасибо!!

0
По вопросам рекламы [email protected]