2016-12-27 3 views
0

Я пытаюсь перекрестно скомпилировать C-библиотеку, известную как Libdsm. Я хочу сгенерировать файлы .so, чтобы я мог написать оболочку jni поверх нее для дальнейшего использования в проекте Android. Я использовал следующие команды, чтобы построить его, как описано авторами библиотеки:Cross Compile libdsm (C Library) для Android

$> ./bootstrap

$> ./configure prefix =/ваш/префикс

$ > сделать

$> сделать установку # возможно

После построения, я понял, что сгенерированные бинарные файлы не будут работать с андроидом из-ди достоинство архитектуры. Как изменить конфигурации, чтобы сгенерированные двоичные файлы стали совместимыми для использования в моем проекте Android?

PS: Я прошел через пару общих учебников, которые используют NDK &, возможно, целую цепочку для создания файлов .so, но я не очень хорошо знаком с ними, и когда я пытаюсь это сделать, я постоянно получаю ошибки ,

ответ

0

Я успешно используется мейкфайлы строить Android СЦ (как «официальный» NDK процесс построения действительно ужасно)

Вам просто нужно используйте правильные инструменты компилятора в папке toolchains в папке ANDROID_NDK (например, c: /android/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/). И добавьте include paths в соответствующие файлы include в/sources/cxx-stl/и libs в папку toolchain lib.

Это то, что мой Makefile выглядит следующим образом:

ifndef $(NDK_PLATFORM) 
    NDK_PLATFORM = android-19 
endif 

ifndef $(GCC_VERSION) 
    GCC_VERSION = 4.9 
endif 

ifndef $(GCC_TARGET) 
    GCC_TARGET=arm-linux-androideabi 
endif 

ifndef $(ARCH) 
    ARCH=arch-arm 
endif 

SYS := $(shell gcc -dumpmachine) 
ifndef $(TOOLS_PLATFORM) 
ifneq (, $(findstring x86_64-apple-darwin, $(SYS))) 
    TOOLS_PLATFORM=darwin-x86_64 
else 
ifneq (, $(findstring x86_64-redhat-linux, $(SYS))) 
    TOOLS_PLATFORM=linux-x86_64 
endif 
    TOOLS_PLATFORM=windows-x86_64 
endif 
endif 

ifndef $(ANDROID_PLATFORM) 
    ANDROID_PLATFORM=armeabi-v7a 
endif 

TOOLCHAIN=$(GCC_TARGET)-$(GCC_VERSION) 
CC_EXECUTABLE=$(GCC_TARGET)-gcc 
CPP_EXECUTABLE=$(GCC_TARGET)-g++ 
SYS_ROOT=$(ANDROID_NDK)/platforms/$(NDK_PLATFORM)/$(ARCH) 
PATH_LINK=$(SYS_ROOT)/usr/lib 
TOOLCHAIN_BIN_FOLDER=$(ANDROID_NDK)/toolchains/$(TOOLCHAIN)/prebuilt/$(TOOLS_PLATFORM)/bin 
TOOLCHAIN_LIB_FOLDER=$(ANDROID_NDK)/toolchains/$(TOOLCHAIN)/prebuilt/$(TOOLS_PLATFORM)/lib 

STDC_FOLDER=$(ANDROID_NDK)/sources/cxx-stl/gnu-libstdc++/$(GCC_VERSION) 
CC="$(TOOLCHAIN_BIN_FOLDER)/$(CPP_EXECUTABLE)" 

NDK_INCLUDE_PATHS = -I "$(SYS_ROOT)/usr/include" 
NDK_INCLUDE_PATHS += -I "$(STDC_FOLDER)/include" 
NDK_INCLUDE_PATHS += -I "$(STDC_FOLDER)/libs/$(ANDROID_PLATFORM)/include" 
NDK_INCLUDE_PATHS += -I "$(STDC_FOLDER)/include/backward" 
NDK_INCLUDE_PATHS += -I "$(TOOLCHAIN_LIB_FOLDER)/gcc/$(GCC_TARGET)/$(GCC_VERSION)/include" 

NDK_LIB_PATHS = -Wl,-L"$(PATH_LINK)" 
NDK_LIB_PATHS += -Wl,-L"$(TOOLCHAIN_LIB_FOLDER)/gcc/$(GCC_TARGET)/$(GCC_VERSION)/armv7-a" 
NDK_LIB_PATHS += -Wl,-L"$(STDC_FOLDER)/libs/$(ANDROID_PLATFORM)/thumb" 



DEFS=-DANDROID -DDISABLE_OFURL -DTARGET_ANDROID -DBOOST_SYSTEM_NO_DEPRECATED 
COPTS = -Werror --sysroot="$(SYS_ROOT)" -gdwarf-2 -Wall -fno-strict-aliasing -mthumb -fno-omit-frame-pointer -fexceptions -mfloat-abi=softfp -fstack-protector -fpic -fno-short-enums -frtti -std=c++1y -x c++ 

LDOPTS = -Wl,-rpath-link="$(PATH_LINK)" -Wl,--no-undefined --sysroot="$(SYS_ROOT)" -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack 

ifeq ($(MODE),DEBUG) 
COPTS += -O0 -g3 -D_DEBUG -DDEBUG 
else 
COPTS += -O3 -s -DNDEBUG 
LDOPTS += -O3 -s 
endif 

Другие, чем ваш Makefile должен работать нормально

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

  • Нет связанных вопросов^_^