Как лучше всего установить и использовать libc ++ из SVN на OS X

Из-за Жук в выпускной версии clang мне нужно скомпилировать и установить его из ствола SVN. Я подумал, что мог бы также скомпилировать ствол SVN libc ++ одновременно. Я использую обновленную версию OS X 10.10.1 с установленными библиотеками и портами macports, где это необходимо.

Мне удалось скомпилировать clang и libc ++, используя команды в конце этого поста, установив их в $HOME/usr/local/, Компиляция моей программы с $HOME/usr/local/bin/clang++ работает отлично. Однако при запуске исполняемых файлов используемой версией libc ++ является системная версия. (Как видно из настроек export DYLD_PRINT_LIBRARIES=1 перед запуском.)

Я тогда попробовал export DYLD_LIBRARY_PATH=$HOME/usr/local/lib что заставляет все исполняемые файлы использовать новую версию libc ++. Однако, похоже, что некоторым другим исполняемым файлам не нравится это изменение, в котором используется libc ++. Например, ls завершается со следующими ошибками:

dyld: Symbol not found: __ZTISt9bad_alloc
Referenced from: /usr/lib/libutil.dylib
Expected in: /Users/d97sjan/usr/local/lib/libc++.1.dylib
in /usr/lib/libutil.dylib
Trace/BPT trap: 5

Является ли это ошибкой в ​​libc ++ или dyld, или я просто схожу с ума, полагая, что глобальная замена libc ++ происходит путем установки DYLD_LIBRARY_PATH возможно ли?

я Можно заставить его работать, запустив мой исполняемый файл с DYLD_LIBRARY_PATH=$HOME/usr/local/lib a.out, но я бы предпочел более чистое решение, если это возможно.

Любые идеи или комментарии о том, как заставить это работать, или, скорее, как это должно быть сделано?

Редактировать: После комментария «Парамагнитного круассана» о том, что невозможно заменить libc ++ на другие двоичные файлы [хотя это работает для некоторых].
Могу ли я во время компиляции добавить некоторые подсказки в моем двоичном файле в dyld, чтобы он загружал правильный libc ++?
Или я должен просто придерживаться стандартного libc ++ и просто скомпилировать свой собственный Clang?
Какой чей-то совет?

Код для компиляции и установки clang и libc ++

# From http://clang.llvm.org/get_started.html
svn co -q http://llvm.org/svn/llvm-project/llvm/trunk llvm
svn co -q http://llvm.org/svn/llvm-project/cfe/trunk llvm/tools/clang
svn co -q http://llvm.org/svn/llvm-project/clang-tools-extra/trunk llvm/tools/clang/tools/extra
svn co -q http://llvm.org/svn/llvm-project/compiler-rt/trunk llvm/projects/compiler-rt
#From http://libcxx.llvm.org/
svn co -q http://llvm.org/svn/llvm-project/libcxx/trunk llvm/projects/libcxx

mkdir llvm_build_release
cd llvm_build_release
cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$HOME/usr/local -DLLVM_TARGETS_TO_BUILD=host ../llvm
ninja
ninja install

1

Решение

Если ваша проблема связана с время выполнения и вы хотите сделать это, я предлагаю вам использовать MacPorts, так как я добавил поддержку для этого в порты libcxx и libcxxabi в прошлом месяце.

В частности, установите порты libcxx и libcxxabi с вариантом + replacemnt_libcxx, установленным во время сборки, и мы создадим вам рут, который вы можете установить в / opt / local / var / system_roots. Чтобы установить рут, используйте darwinup:

  sudo darwinup install /opt/local/var/system_roots/libcxxabi-*
sudo darwinup install /opt/local/var/system_roots/libcxx-*

Поскольку это заменит системную библиотеку, будьте готовы загрузиться в режиме целевого диска и удалить корни, если что-то пойдет не так:

  sudo darwinup -p /Volumes/TargetDisk list
sudo darwinup -p /Volumes/TargetDisk uninstall <id for libcxx root>
sudo darwinup -p /Volumes/TargetDisk uninstall <id for libcxxabi root>

Также обратите внимание, что версии libcxx и libcxxabi являются версиями от llvm-3.5.0. Я не уверен в точных различиях между этой версией и тем, что есть в OS X 10.10.1, и я не уверен, содержит ли она нужное вам исправление или нет. Если это не так, пожалуйста, напишите проблему в MacPorts Trac, и я подберу ее для вас.


Если ваша проблема связана с STL, то, опять же, я предлагаю вам использовать MacPorts и просто установить нужные порты clang:

sudo port -v -s install clang-3.4
sudo port -v -s install clang-3.5
sudo port -v -s install clang-3.6

Затем вы можете использовать компилятор clang ++ — mp-3.4 (или 3.5 / 3.6) из командной строки или использовать «sudo port select clang», чтобы установить то, что вы хотите использовать по умолчанию для «clang ++».

0

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


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