Compilando biblioteca C ++ externa para uso com o projeto iOS

Eu sou completamente novo no uso de bibliotecas C ++, então aprecio que isso possa ser um pouco específico para o meu caso (informe-me e posso fornecer mais detalhes).

Eu tenho uma biblioteca C ++ externa que estou tentando usar com um projeto iOS. A biblioteca segue um padrão de configuração para configurar, criar, criar para gerar um arquivo de biblioteca .a. Quando tento adicionar este arquivo de biblioteca ao Xcode, recebo o seguinte erro:

ignorando o arquivo /Users/Developer/iOS/TestProj/libpresage.a, o arquivo foi criado para o arquivo morto que não é a arquitetura que está sendo vinculada (i386):

/Users/Developer/iOS/TestProj/libpresage.a

Baseado emessa questão, Tentei transformar o Build Active Architecture Only como NO e recebo o mesmo erro. Isso me faz suspeitar que compilei a biblioteca para a arquitetura incorreta.

A execução de lipo -info no arquivo .a fornece:

arquivo de entrada libpresage.a não é um arquivo gordo Arquivo não gordo: libpresage.a

é arquitetura: x86_64

Como não são armv7s, armv7 ou arm64, tento compilar a biblioteca C ++ novamente com os seguintes parâmetros:

1) Experimentar

./configure CC="gcc -arch armv7s" \
                 CXX="g++ -arch armv7s" \
                 CPP="gcc -E" CXXCPP="g++ -E"

Erro na compilação, recebo:

ld: library not found for -lcrt1.3.1.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)

2) Experimentar

./configure CC="gcc -arch arm64" \
                 CXX="g++ -arch arm64" \
                 CPP="gcc -E" CXXCPP="g++ -E"

Erro na compilação, recebo:

ld: warning: ld: warning: ignoring file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libSystem.dylib, faltando a arquitetura necessária arm64 em arquivo /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libSystem.dylib (2 fatias) ignorando o arquivo /Applications/Xcode.app/Contents/ Developer / Platforms / MacOSX.platform / Developer / SDKs / MacOSX10.10.sdk / usr / lib / libstdc ++. Dylib, falta da arquitetura arm64 necessária no arquivo /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer /SDKs/MacOSX10.10.sdk/usr/lib/libstdc++.dylib (2 fatias)

ld: os principais executáveis dinâmicos devem vincular-se ao libSystem.dylib para a arquitetura arm64 clang: error: o linker falhou com o código de saída 1 (use -v para ver a chamada)

Existe algo óbvio que estou perdendo?

EDITAR:

Obrigado pelas respostas, então eu consegui colocar a biblioteca no Xcode como um destino de construção personalizado, apontando o comando 'make' para as bibliotecas MakeFile. Esta compilação bem.

Meus passos a partir daqui:

Adicione uma dependência do meu destino de aplicativo iOS do Objective C ao destino de compilação personalizado.Faça referência à biblioteca e crie um wrapper Objective C ++.Isso parece bom até que eu precise chamar a biblioteca C ++ externa, e recebo o erro ao compilar:

Símbolos indefinidos para a arquitetura armv7: "Presage :: Presage (PresageCallback *)", referenciada em: - [PresageBridge init] em PresageBridge.o "Presage :: ~ Presage ()", referenciada em: - [PresageBridge init] em PresageBridge. o ld: símbolo (s) não encontrado (s) para a arquitetura armv7 clang: erro: o comando do vinculador falhou com o código de saída 1 (use -v para ver a chamada)

Meu wrapper C ++ objetivo (vinculando o cabeçalho externo da biblioteca C ++ presage.h):

#import "PresageBridge.h"
#include "presage.h"

@implementation PresageBridge

- (instancetype)init
{
    if(self = [super init])
    {

       Presage hello(&callback);
    }

    return self;
}

Com base no código acima, não parece que estou perdendo o cabeçalho, e o interessante é que também tentei criar uma instância de outras classes na biblioteca externa e elas parecem estar funcionando, o que sugere que o Xcode pode vincule presage.h corretamente por algum motivo.

questionAnswers(6)

yourAnswerToTheQuestion