2015-06-10 5 views
0

Я пытаюсь получить emscripten для работы с OS X 10.8, см. this post по некоторым связанным с этим вопросам. По-видимому, версия clang++, поставляемая с Xcode, слишком старая, поэтому я получил недавний clang 3.7.0 с использованием MacPorts. Я даже сказал CMake использовать этот компилятор (проходящее -DCMAKE_CXX_COMPILER=clang++-mp-3.7 в командной строке), но она по-прежнему не удается:MacPorts clang не использует свои собственные заголовки

[ 33%] Building CXX object CMakeFiles/optimizer.dir/parser.cpp.o 
/opt/local/bin/clang++-mp-3.7 -std=c++11 -fno-exceptions -fno-rtti -O3 -DNDEBUG 
    -o CMakeFiles/optimizer.dir/parser.cpp.o 
    -c …/emsdk/emscripten/master/tools/optimizer/parser.cpp 
In file included from …/emsdk/emscripten/master/tools/optimizer/parser.cpp:2: 
In file included from …/emsdk/emscripten/master/tools/optimizer/parser.h:12: 
…/emsdk/emscripten/master/tools/optimizer/istring.h:3:10: fatal error: 
     'unordered_set' file not found 
#include <unordered_set> 
     ^
1 error generated. 

я могу воспроизвести эту проблему, запустив компилятор из командной строки. В режиме параллельной сборки иногда вместо этого жалуется на <cstdint> для optimizer.cpp. Оба этих заголовка существуют в /opt/local/libexec/llvm-3.7/include/c++/v1/.

  • Что такое канонический способ использования установленной в macports версии clang++, включая ее заголовки? Должен ли я использовать -I и выработать полный путь, или есть что-то более короткое?
  • Могу ли я безопасно это сделать, не переключая библиотеку времени выполнения на тот, который поставляется с clang MacPorts? Если нет, могу ли я каким-либо образом закодировать полный путь библиотеки времени выполнения в созданный двоичный файл, либо для этой единственной библиотеки, либо с помощью аргумента -rpath до ld или некоторой эквивалентной альтернативы?
    Обновление: Я получаю неразрешенные символы, когда пытаюсь связать материал после указания каталога include вручную, и я не знаю, как это решить. Пакет libcxx из MacPorts пуст, за исключением файла readme.

ответ

0

Я решил исходную проблему, добавив CXXFLAGS=--stdlib=libc++ в окружающую среду. Тогда даже системная версия clang сделает все, что мне нужно. Этот флаг работает с маской для версии MacPorts clang: указав, что я получаю успешную сборку, и я даже могу проверить (используя переключатель компилятора -E), что он использует упомянутые выше заголовки. Я все еще не уверен, есть ли что-нибудь, чтобы гарантировать, что заголовки соответствуют версии системы libc++.

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