Uso de encabezados C++ externos en Objective-C
ios xcode (4)
A partir de un proyecto de aplicación "en blanco":
Cree una carpeta "Bibliotecas" en el proyecto de su aplicación, preferiblemente como un hermano en su archivo MyApp.xcodeproj, pero puede estar en cualquier lugar. Cree subcarpetas para cada Configuración (Depuración, Lanzamiento, etc.) y posiblemente para cada arquitectura (armv7, armv7s, arm64) a menos que el binario sea un archivo binario universal que contenga todas las arquitecturas.
Obtenga los encabezados de la biblioteca de terceros y los binarios de la biblioteca estática (posiblemente más de uno para diferentes plataformas, Configuraciones y arquitecturas) y muévalos a la carpeta "Biblioteca" en las subcarpetas correspondientes (que es posible que necesite crear):
Por ejemplo, suponiendo que tenía un binario universal (armv7, armv7s, arm64) y versiones de depuración y lanzamiento de esa biblioteca: ahora, se supone que la estructura de carpetas es la siguiente:
$(SRCROOT)/Libraries Debug-iphoneos include ThirdParty third_party.hh ... libThirdParty.a Release-iphoneos include ThirdParty third_party.hh ... libThirdParty.a MyApp.xcodeproj
Configuración de compilación de "Rutas de búsqueda de bibliotecas":
Arrastre la carpeta "Bibliotecas" a su proyecto Xcode. Esto puede crear automáticamente una ruta de búsqueda de biblioteca en la configuración de compilación. Por favor verifica esto, y si no es correcto, arréglalo.
Dado el ejemplo, agregue las siguientes rutas de búsqueda de bibliotecas para la configuración de depuración y lanzamiento:
Debug: Rutas de búsqueda de bibliotecas :
$(SRCROOT)/Libraries/Debug-iphoneos
Lanzamiento: Rutas de búsqueda de bibliotecas :
$(SRCROOT)/Libraries/Release-iphoneos
Es posible que tenga diferentes rutas de búsqueda de bibliotecas para determinados pares de plataformas de Configuración y Destino. Establecer diferentes caminos en la configuración de construcción en consecuencia.
Configuración de "Rutas de búsqueda de encabezado":
Dado el ejemplo, agregue la siguiente ruta de búsqueda de encabezado a la depuración y la configuración de la versión:
Debug: Rutas de búsqueda de encabezados :
$(SRCROOT)/Libraries/Debug-iphoneos/include
Release: Rutas de búsqueda de encabezados :
$(SRCROOT)/Libraries/Release-iphoneos/include
Del mismo modo, puede tener diferentes rutas para pares Config / Target particulares, aunque los encabezados pueden ser los mismos.
Vincule su aplicación con la biblioteca estándar de C ++ agregando
-lc++
a la configuración de compilación Otros indicadores de-lc++
.Importe el encabezado en sus archivos de la siguiente manera:
#import <ThirdParty/third_party.hh>
En mi proyecto de iOS necesito usar una biblioteca externa escrita en C ++. Los archivos de encabezado de C ++ están todos en un directorio.
He agregado estos encabezados de C ++ a mi proyecto Xcode, y también he especificado una ruta de búsqueda de encabezado (en Configuración de compilación).
El problema es que estos encabezados de C ++ se incluyen entre sí mediante corchetes angulares <>. Esto resulta en:
''filename.h'' file not found with <angled> include, use "quotes" instead.
Lo extraño es que Xcode no se queja de todos los encabezados. También el mismo encabezado # include''d en un archivo está bien, mientras que un problema cuando # include''d en otro archivo. Creo que esto se debe al hecho de que estos encabezados se incluyen entre ellos.
- ¿Por qué no funciona la ruta de búsqueda?
- ¿Hay una manera de resolver esto sin modificar estos archivos de encabezado?
¡Gracias!
En XCode después de configurar "Rutas de búsqueda de encabezados de usuarios" para que apunten al directorio de su biblioteca, también debe asegurarse de que un campo llamado "Buscar rutas de usuarios siempre" esté configurado en "Sí"
Esto solucionó el problema que estaba teniendo: con el archivo <boost / signal2.hpp> no encontrado con <angled> incluir, use "comillas" en su lugar.
En Xcode 9, necesito agregar la ruta de los archivos de encabezado a la configuración de compilación Header Search Paths
, no las User Header Search Paths
.
Xcode agregará User Header Search Paths
para compilar comandos como opciones -iquote
, pero -iquote
Header Search Paths
como opciones -I
. Esa es la diferencia clave.
#include <bla.h>
es para bibliotecas estándar o cabeceras de marcos, y la estrategia de búsqueda es diferente de la utilizada para
#include "bla.h"
Ver por ejemplo
Como solución alternativa, puede establecer la configuración de compilación de Xcode "Buscar siempre rutas de usuario" en SÍ.