Red de conocimiento informático - Aprendizaje de programación - ¿Cómo instalar libc++ en mac?

¿Cómo instalar libc++ en mac?

De hecho, xcode viene con clang y la versión es muy, muy nueva. Pero faltaban algunos componentes que necesitaba, así que tuve que recompilarme. Pero no quiero sobrescribir clang/libc++ original. Porque esto es muy peligroso. Si hay un problema con la libc++ que compilé y la uso para sobrescribir la libc++ del sistema, es posible que ni siquiera pueda ingresar al sistema. Es posible que los usuarios de Linux quieran comparar los riesgos de compilar glibc ellos mismos.

No sé qué modificaciones ha realizado Apple en clang. Descargué el código del sitio web de llvm y lo compilé.

Hay documentación en el sitio web, pero hay un problema con la documentación. No funciona en mi máquina. Descubrí otra manera.

Primero compila llvm/clang

El árbol de directorios es el siguiente:

llvm: llvm.org/svn/llvm-project/llvm/trunk

llvm/tools/clang:llvm.org/svn/llvm-project/cfe/trunk

llvm/tools/clang/tools/extra:llvm.org/svn/llvm-project /clang- tools-extra/trunk

llvm/projects/ compiler-rt: llvm.org/svn/llvm-project/compiler-rt/trunk

Luego ejecute en llvm directorio

. /configure -enable-libcpp -enable-cxx11 -enable-keep-symbols -disable-docs -enable-debug-runtime -enable-debug-symbols -enable-optimized CC=/Applications/Xcode.app/Contents /Developer/Toolchains /XcodeDefault.xctoolchain/usr/bin/clang CXX=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault .xctoolchain/usr/bin/clang++

make

make instalar

Eliminé intencionalmente las herramientas de línea de comando del paquete XCode para evitar conflictos.

Luego libcxxabi y libcxx

libcxxabi: llvm.org/svn/llvm-project/libcxxabi/trunk

libcxx: llvm.org/svn/llvm - project/libcxx/trunk

Instale primero abi, luego instale libcxx.

Exportar TRIPLE=-apple- antes de buildit

Esto no es suficiente, abra el archivo lib/buildit y cambie /usr/lib/libc++ a / después de que install_name sea abi.dylib usr/local/lib/libc++abi.dylib para que funcione correctamente.

Entonces

. /buildit

Copie manualmente los archivos compilados al directorio /usr/local/lib.

Entonces, libcxx es similar, primero modifique el archivo buildit.

No basta con hacer esto.

Para compilar, primero debe usar -nostdinc++ para deshabilitar la búsqueda de archivos de encabezado y biblioteca en el directorio /usr/lib. Luego incluya manualmente nuestro directorio así:

clang++ -o t -nostdinc++ -std=c++11 -stdlib=libc++ -I /usr/local/lib/c++/v1 -L/usr /local/ lib test.cpp

Después de eso, puedes usar otool

$ otool -L ./t

./t:

/usr/local/lib/libc++.1.dylib (versión compatible 1.0.0, versión actual 1.0.0)

/usr/lib/libSystem.