2016-08-02 3 views
0

Я полностью смущен и нуждаюсь в помощи от того, кто создал общую библиотеку C++, которая будет работать на любой платформе, используя любой IDE.Облицовка проблем при создании общей библиотеки C++ для нескольких архитектур (x86_64, armv7, armv7s, arm64, i386)

Что я сделал до сих пор:

1) Создан разделяемую библиотеку с помощью CMake в Ubuntu.

2) Перенесенные исходные файлы и Makefile (CMake) для MacOSX (El Capitan)

3) Создан каталог сборки

4) Использование терминала в Mac OS, я побежал:

$ cmake .. 
$ sudo make install 

5) Создал проект iOS Xcode, поддерживающий архитектуры armv7 и arm64

6) Используемый путь поиска заголовка и путь поиска библиотеки для поиска заголовков и библиотеки я установил в

/usr/local/include/ 

и

/usr/local/lib 

7) Используется один из включенного одного из заголовка файла библиотеки в main.mm (переименован main.m) и создал объект для класса

8) Построение проекта дает мне ошибку из-за следующей причине

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 

Вот содержание с моей 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) 

Может кто-нибудь помочь мне с этим, пожалуйста ...

+0

@halfelf - спасибо за изменения. Я новичок в этом, так что это действительно большая помощь. – San

+0

Я не могу говорить с компилятором и вариантами OSX. Но, надеюсь, это https://gcc.gnu.org/onlinedocs/gcc/Submodel-Options.html#Submodel-Options может указать вам ближе к намеченной цели. Кроме того, я бы искал кросс-компиляторы, а ссылка, которую я поставил, может быть не такой, о чем вы просите. – M4rc

ответ

0

В вашем шаге 4 вы собираете библиотеку на MacOS, которая x86_64; вы НЕ можете просто скопировать его в проект iOS, потому что iOS использует arm64.

Итак, вы должны перекрестно скомпилировать библиотеку для arm64 и использовать ее для своего проекта iOS.

+0

Я новичок в кросс-компиляции, можете ли вы предложить любые методы или ссылки, которые могут помочь мне с тем же. – San

Смежные вопросы