Когда я запускаю следующий фрагмент кода из 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 ошибки.
Вы можете сами посмотреть, какая командная строка Xcode используется.
Попробуйте использовать собственную стандартную библиотеку clang:
clang -std=c++11 -stdlib=libc++ main.cpp
По умолчанию используется стандартная библиотека GNU (libstdc++
), но версия Apple довольно старая и не поддерживает C ++ 11.
Убедитесь, что вы вызываете clang++
не clang
, как для компилятора а также линкер.
clang++
(как компилятор) нуждается в -std=c++11
а также -stdlib=libc++
компилятор флаги и clang++
(как компоновщик) нуждается в -stdlib=libc++
линкер флаг.
Спасибо всем, кто предложил мне решения, которые поддерживали меня.
Наконец это то, что сработало для меня.
Я удалил инструменты командной строки, используя сценарий оболочки, упомянутый в 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 ++
скомпилировать мой код.
Это работало нормально. Спасибо!!