2016-08-02 35 views
0

Ich bin total verwirrt und brauche Hilfe von jemandem, der C++ Shared Library erstellt hat, die auf jeder Plattform funktioniert jede IDE.Probleme beim Erstellen einer C++ - Shared Library für mehrere Architekturen (x86_64, armv7, armv7s, arm64, i386)

Was ich bisher getan haben: Erstellt

1) eine gemeinsame Bibliothek cmake in Ubuntu verwenden.

2) übertragene Quelldateien und die Steuerdatei (cmake) zu MacOSX (El Capitan)

3) das Build-Verzeichnis Erstellt

4) Verwenden von Terminal in Mac OS, ich lief:

$ cmake .. 
$ sudo make install 

5) Ein Xcode iOS-Projekt erstellt, das armv7- und arm64-Architekturen unterstützt

6) Verwendeter Header-Suchpfad und Bibliothekssuchpfad, um die Header und die Bibliothek zu finden Ich hatte in

/usr/local/include/ 

und

/usr/local/lib 

7) Verwendet eine der mitgelieferten einer der Bibliothek Header-Datei in main.mm (umbenannt main.m) und erstellt ein Objekt für die Klasse installiert

Bauen

acht) das Projekt gibt mir Fehler wegen folgendem Grund

ld: warning: ignoring file /usr/local/lib/libMyLibrary.dylib, file was built for x86_64 which is not the architecture being linked (arm64): /usr/local/lib/libMyLibrary.dylib 

Hier sind die Inhalte s meiner Cmake

cmake_minimum_required(VERSION 2.8) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lsqlite3") 

#Adding source files 
file(GLOB SOURCES "src/*.cpp") 

#Generate the shared library from the sources 
add_library(MyLibraryName SHARED ${SOURCES}) 

target_compile_options(MyLibraryFolder PRIVATE -std=c++11 -lsqlite3) 

add_executable(MyLibraryName ${SOURCES}) 

target_link_libraries(MyLibraryName PRIVATE -lsqlite3) 

#Set the location for library installation. Use "sudo make install" to apply 
install(TARGETS MyLibraryName DESTINATION /usr/local/lib) 

install(DIRECTORY inc/${MyLibraryName_CPP} DESTINATION /usr/local/include) 

Kann mir jemand helfen mit diesem, bitte ...

+0

@halfelf - danke für Änderungen. Ich bin neu dazu, das ist wirklich eine große Hilfe. – San

+0

Ich kann nicht mit OSX Compiler und Varianten sprechen. Aber hoffentlich können diese https://gcc.gnu.org/onlinedocs/gcc/Submodel-Options.html#Submodel-Options Sie näher an Ihr beabsichtigtes Ziel heranführen. Außerdem würde ich nach Cross-Compilern suchen, da der von mir angegebene Link möglicherweise nicht das ist, wonach Sie fragen. – M4rc

Antwort

0

In Ihrem Schritt 4, werden Sie die Bibliothek auf MacOS kompilieren, die x86_64 ist; Sie können es NICHT einfach in das iOS-Projekt kopieren, da iOS arm64 verwendet.

Sie sollten also die Bibliothek für arm64 Cross-kompilieren und für Ihr iOS-Projekt verwenden.

+0

Ich bin neu zu Cross-Compiling, können Sie bitte vorschlagen, Methoden oder Links, die mir mit dem gleichen helfen können. – San