2013-02-12 5 views
3

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

#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 --version 
Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn) 
Target: x86_64-apple-darwin12.2.0 
Thread model: 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: error: no member named 'unique_ptr' in namespace 'std' 
    std::unique_ptr foo(new int(0)); 
    ~~~~~^ 
main.cpp:7:24: error: expected '(' for function-style cast or type construction 
    std::unique_ptr foo(new int(0)); 
        ~~~^ 
main.cpp:7:26: error: use of undeclared identifier 'foo' 
    std::unique_ptr foo(new int(0)); 
         ^
3 errors generated. 
+3

Попробуйте '-std = C++ 11' – Pubby

+0

Да, я тоже это пробовал. такой же результат. – user2061170

+0

'clang ++ -std = C++ 11' не может найти определение для' std :: unique_ptr', даже если '#include '. странный компилятор. использовать gcc. – Walter

ответ

1

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

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

спасибо! это полезно. Мне было интересно увидеть, как xcode выполняет компиляцию и компоновку. Но выход довольно подавляющим. Его огромная команда, которая начинается с чего-то вроде – user2061170

+0

спасибо! это полезно.Мне было интересно увидеть, как xcode выполняет компиляцию и компоновку. Но выход довольно подавляющим. Его огромная команда, которая начинается с чего-то вроде «/Applications/xcode4.6/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x C++ -arch x86_64 -fmessage-length = 0 -std = gnu ++ 11 -stdlib = libC++ ... "и переходит к множеству вещей из папки проекта. Если я извлекаю необходимые вещи для себя и использую их, он создает файл .o, но ссылка не принимает его как действительный файл. Я буду продолжать пытаться. еще раз спасибо. – user2061170

2

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

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

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

+0

Я написал об этой самой проблеме здесь: http://marshall.calepin.co/llvmclang-and-standard-libraries-on-mac-os-x.html –

+0

спасибо! это то, что идеально должно работать. Но, к сожалению, это не работает для меня, и поэтому я стараюсь слишком много. – user2061170

0

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

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

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

, чтобы скомпилировать мой код.

Это сработало отлично. благодаря!!

0

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

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

Смежные вопросы