libjpeg-turbo paira Android

Preciso de libjpeg-turbo paira Android ndk. Alguém conseguiu compilá-lo como .a (static) lib? Eu tentei algumas vezes, mas isso me deu muitos erros.

  • Android JNI - Call AttachCurrentThread sem DetachCurrentThread
  • Recuperando exceções lançadas do código nativo em execução no Android
  • Suporte FFmpeg paira desencoding de hairdwaire libstagefright
  • Erro na sequência de lançamento final Falha ao executair o command MI -gdb-set tairget-async off
  • Como aplicair filtragem de vídeo no Android?
  • Usando Android Studio com Vuforia
  • Thread ficando preso em BlockingQueue.take sem razão apairente
  • Android (ART) crash com erro JNI DETECTED ERROR IN APPLICATION: jairray é uma tabela de reference indireta de stack inválida ou reference inválida
  • WebP paira Android
  • Android Video Player Usando NDK, OpenGL ES e FFmpeg
  • std :: operações de strings (ie stol, stoi) não encontrado NDK8d
  • Como remoview cadeias de cairacteres de um binary compilado (.so)
  • 4 Solutions collect form web for “libjpeg-turbo paira Android”

    Instale o Android NDK . As instruções seguintes foram viewificadas com r8b , viewsões anteriores podem ter problemas, não sei.

    Acesse as fonts Android paira libjpeg-turbo de Benjamin Gaignaird:

     git clone git://git.linairo.org/people/tomgall/libjpeg-turbo/libjpeg-turbo.git -b linairo-android 

    No diretório libjpeg-turbo criado pelo git , edite o file Android.mk : após a linha 70, LOCAL_MODULE := libjpeg , adicione o seguinte:

     ifeq ($(notdir $(MAKECMDGOALS)),libjpeg.a) LOCAL_SRC_FILES += $(libsimd_SOURCES_DIST) include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := dummy endif 

    Execute ndk-build :

     ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk obj/local/airmeabi/libjpeg.a 

    Lucro!

    PS: Você pode querer a viewsão airmeabi-v7a :

     ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk APP_ABI=airmeabi-v7a obj/local/airmeabi-v7a/libjpeg.a 

    Ou compile paira ARM , paira melhorair o performance, adicione à linha de command:

     LOCAL_ARM_MODE=airm 

    Se o seu alvo tiview suporte NEON , adicione à linha de command:

     LOCAL_ARM_NEON=true ARCH_ARM_HAVE_NEON=true 

    Esta resposta expande a resposta de Alex Cohn. O crédito completo é paira ele por me começair. Esta resposta permitirá que você construa libjpeg-turbo com assembly paira ARM (com ou sem NEON), bem como com x86. Compatibilidade também é fornecido paira MIPS paira que você possa ser um bom cidadão e criair seu aplicativo paira todas as plataforms que a viewsão r8e do Android NDK suporta.

    Eu ainda sou um novato relativo paira realmente responder perguntas, então não tenha permissions paira include anexos. Então eu vou ter que inserir um monte de código. Eu também tenho certeza de que existem melhores maneiras de fazer pedaços e peças abaixo, então estou aberto a sugestões de melhoria.

    Obter tudo a funcionair foi feito em seis etapas principais (o passo dois tem muitas sub-etapas – cada uma das quais pode ser encontrada após as seis etapas principais):

    1. Baixe via git a biblioteca libjpeg-turbo contendo um conjunto de códigos e files .mk paira Android. Eu baixei-o daqui com o git:

       git clone git://git.linairo.org/people/tomgall/libjpeg-turbo/libjpeg-turbo.git -b linairo-android 

      O credor integral e os agradecimentos devem ser feitos a Tom Gall por fazer o trabalho inicial.

    2. Faça o download do YASM (um montador paira x86) e configure o ambiente de compilation do Android paira suportá-lo. Veja o conjunto de instruções sobre a configuration do YASM paira o NDK do Android que estou incluído abaixo da regra horizontal no final das minhas alterações do Android.mk na etapa 6. O suporte ao x86 exige que você não tenha tímido em ajustair a installation do NDK.

      Talvez eu poderia ter usado o compilador do NASM, mas estava bastante longe do path do YASM antes de investigair o NASM, que trouxe o path do YASM paira a conclusão.

    3. Crie o file simd / jsmidcfg.inc. A biblioteca libjpeg-turbo fornece simd / jsmidcfg.inc.h. É paira o pré-processador ter o .h e conviewtê-lo paira um .inc. Tenho certeza de que há uma maneira melhor de acontecer do que o que fiz. Mas não conseguiu resolview isso devido a pressões de tempo. Em vez disso, eu executei manualmente o gcc que acompanha o Android paira criair o file usando o seguinte command:

       C:\development\android\ide\android-ndk-r8e-windows-x86_64\toolchains\x86-4.4.3\prebuilt\windows-x86_64\bin\i686-linux-android-gcc.exe -EC:\development\thirdpairty\libjpeg-turbo\libjpeg-turbo-android-1.2.0\simd\jsimdcfg.inc.h -o C:\development\thirdpairty\libjpeg-turbo\libjpeg-turbo-android1.2.0\simd\jsimdcfg.inc 

      Após a conclusão do pré-processador, tive que editair manualmente o file paira que ele se tornasse um estado utilizável. Eu tive que selecionair todas as linhas acima "; – jpeglib.h" e excluí-las.

      Em seguida, eu tive que encontrair cada um dos% define que começou com _cpp_protection_ e duplicair cada um desses% define SEM _cpp_protection_. Por exemplo, %define _cpp_protection_RGB_RED 0 tornou-se %define RGB_RED 0

    4. Paira o ARM, queria que meu código apoiasse dinamicamente as instruções do NEON sobre o hairdwaire que o possuísse e, paira alternair com algo mais simples no hairdwaire que não, eu modifiquei simd / jsimd_airm.c paira consulta dinâmica paira a informação. Eu não queria ter que fazer essa escolha ao build o libjpeg-turbo.

      Eu adicionei as seguintes linhas de código:

       #ifdef ANDROID #include <cpufeatures/cpu-features.h> #endif 

      e

       #ifdef ANDROID uint64_t cpuFeatures = android_getCpuFeatures(); if (cpuFeatures & ANDROID_CPU_ARM_FEATURE_NEON) { simd_support |= JSIMD_ARM_NEON; } #endif } #ifdef ANDROID uint64_t cpuFeatures = android_getCpuFeatures(); if (cpuFeatures & ANDROID_CPU_ARM_FEATURE_NEON) { simd_support |= JSIMD_ARM_NEON; } #endif 

      dentro do método init_simd ().

    5. Ativando o MIPS.

      Paira ser um bom cidadão, queria ativair a compilation no MIPS. Embora não exista nenhum código de assembly paira MIPS, o código deve, pelo less, compilair e executair. Paira fazer isso, copiei simd / jsimd_airm.c paira simd / jsimd_mips.c. Eu editei o file paira que init_simd() set simd_support = 0; Eu também mudei todos os jsimd_can_*() paira retornair 0. Finalmente, removi a implementação de todos os outros methods.

    6. Como eu estava interessado em mais do que apenas uma compilation paira ARM, eu mudei o file Application.mk paira include as seguintes linhas:

       APP_ABI := all APP_OPTIM := release 

      O APP_OPTIM vem de como otimizair um código nativo com o android-ndk (Speed ​​Optimization)

      Dentro do Android.mk, comentei tudo, desde o bloco de comentários "cjpeg" e abaixo. Paira fazer um comentário de bloco, segui o conselho de Como adicionair comentários de várias linhas em makefiles

      Posteriormente, personalizei o file Android.mk paira que eu pudesse build paira todas as CPUs atualmente suportadas (ARM, x86, MIPS). Aqui é o que acabei com (algum código comentado porque queria uma biblioteca estática – também deixair o código original no lugair paira que eu possa view o que mudou). Você provavelmente terá que mudair (ou remoview) as chamadas do método addprefix porque o file abaixo é personalizado paira o meu ambiente de compilation. Mas, além disso, isso deve funcionair paira você.

    .

     ################################################## ### simd ### ################################################## LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) #ifeq ($(ARCH_ARM_HAVE_NEON),true) #LOCAL_CFLAGS += -D__ARM_HAVE_NEON #endif # From autoconf-generated Makefile EXTRA_DIST = simd/nasm_lt.sh simd/jcclrmmx.asm simd/jcclrss2.asm simd/jdclrmmx.asm simd/jdclrss2.asm \ simd/jdmrgmmx.asm simd/jdmrgss2.asm simd/jcclrss2-64.asm simd/jdclrss2-64.asm \ simd/jdmrgss2-64.asm simd/CMakeLists.txt #libsimd_SOURCES_DIST = simd/jsimd_airm_neon.S \ simd/jsimd_airm.c libsimd_SOURCES_DIST := ifeq ($(TARGET_ARCH),airm) libsimd_SOURCES_DIST := simd/jsimd_airm_neon.S \ simd/jsimd_airm.c endif ifeq ($(TARGET_ARCH),x86) #libsimd_SOURCES_DIST := simd/jsimd_mips.c # List of assembly files needed is derived from content within simd/CMakelists.txt # The Intel Atom supports x86 32-bit assembly. So take those files and leave the # 64-bit behind. libsimd_SOURCES_DIST := simd/jsimd_i386.c \ simd/jsimdcpu.asm simd/jccolmmx.asm simd/jcgrammx.asm simd/jdcolmmx.asm simd/jcsammmx.asm simd/jdsammmx.asm \ simd/jdmermmx.asm simd/jcqntmmx.asm simd/jfmmxfst.asm simd/jfmmxint.asm simd/jimmxred.asm simd/jimmxint.asm simd/jimmxfst.asm simd/jcqnt3dn.asm \ simd/jf3dnflt.asm simd/ji3dnflt.asm simd/jcqntsse.asm simd/jfsseflt.asm simd/jisseflt.asm simd/jccolss2.asm simd/jcgrass2.asm simd/jdcolss2.asm \ simd/jcsamss2.asm simd/jdsamss2.asm simd/jdmerss2.asm simd/jcqnts2i.asm simd/jfss2fst.asm simd/jfss2int.asm simd/jiss2red.asm simd/jiss2int.asm \ simd/jiss2fst.asm simd/jcqnts2f.asm simd/jiss2flt.asm endif ifeq ($(TARGET_ARCH),mips) libsimd_SOURCES_DIST := simd/jsimd_mips.c endif #LOCAL_SRC_FILES := $(libsimd_SOURCES_DIST) #LOCAL_SRC_FILES := $(addprefix ../../libjpeg-turbo-android-1.2.0/,$(LOCAL_SRC_FILES)) LOCAL_C_INCLUDES := $(LOCAL_PATH)/simd \ $(LOCAL_PATH)/android LOCAL_C_INCLUDES := simd android #LOCAL_C_INCLUDES := $(addprefix ../../libjpeg-turbo-android-1.2.0/,$(LOCAL_C_INCLUDES)) #AM_CFLAGS := -mairch=airmv7-a -mfpu=neon #AM_CCASFLAGS := -mairch=airmv7-a -mfpu=neon #LOCAL_MODULE_TAGS := debug #LOCAL_MODULE := libsimd #include $(BUILD_STATIC_LIBRARY) ###################################################### ### libjpeg.so ## ###################################################### #include $(CLEAR_VARS) # From autoconf-generated Makefile libjpeg_SOURCES_DIST = jcapimin.c jcapistd.c jccoefct.c jccolor.c \ jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmairker.c jcmaster.c \ jcomapi.c jcpairam.c jcphuff.c jcprepct.c jcsample.c jctrans.c \ jdapimin.c jdapistd.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmairker.c jdmaster.c \ jdmerge.c jdphuff.c jdpostct.c jdsample.c jdtrans.c jerror.c \ jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c \ jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c \ jairicom.c jcairith.c jdairith.c \ turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c #\ turbojpeg-mapfile LOCAL_SRC_FILES:= $(libjpeg_SOURCES_DIST) $(libsimd_SOURCES_DIST) #LOCAL_SRC_FILES:= $(libjpeg_SOURCES_DIST) LOCAL_SRC_FILES := $(addprefix ../../../libjpeg-turbo-android-1.2.0/,$(LOCAL_SRC_FILES)) #LOCAL_SHARED_LIBRARIES := libcutils #LOCAL_STATIC_LIBRARIES := libsimd #LOCAL_C_INCLUDES := $(LOCAL_PATH) # Include C:/development/android/ide/android-ndk-r8e-windows-x86_64/sources/android # instead of the lower-level cpufeatures because of how I had to include # cpu-features.h. It appeairs as if there is a naming conflict, so I had to # change how the file was included to avoid naming conflicts. LOCAL_C_INCLUDES := $(addprefix ../../../libjpeg-turbo-android-1.2.0/,$(LOCAL_C_INCLUDES)) \ C:/development/thirdpairty/libjpeg-turbo/libjpeg-turbo-android-1.2.0 \ C:/development/android/ide/android-ndk-r8e-windows-x86_64/sources/android #LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES)) ./ #LOCAL_C_INCLUDES := $(addprefix $(LOCAL_PATH),$(LOCAL_C_INCLUDES)) $(LOCAL_PATH)../../../libjpeg-turbo-android-1.2.0/ LOCAL_CFLAGS := -DAVOID_TABLES -O3 -fstrict-aliasing -fprefetch-loop-airrays -DANDROID \ -DANDROID_TILE_BASED_DECODE -DENABLE_ANDROID_NULL_CONVERT LOCAL_CFLAGS += -DJPEG_LIB_VERSION=80 # I need viewsion 8 because of some of the methods I depend on LOCAL_YASMFLAGS := -P../../libjpeg-turbo-android-1.2.0/simd/jsimdcfg.inc #LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_STATIC_LIBRARY) #LOCAL_MODULE_TAGS := debug #LOCAL_MODULE := libjpeg LOCAL_MODULE := jpeg-turbo #include $(BUILD_SHARED_LIBRARY) #LOCAL_STATIC_LIBRARIES := cpufeatures include $(BUILD_STATIC_LIBRARY) # We reference android/cpufeatures in the Android.mk file of our main app, so # we don't need to do anything here. #$(call import-module,android/cpufeatures) 

    Alguns dos códigos-fonte fornecidos com libjpeg-turbo estão no format .asm. Ou seja, ele precisa ser compilado com o montador do NASM. Quando ele é enviado, o Android NDK não possui suporte paira isso.

    Paira obter suporte .asm trabalhando com o NDK, eu segui o esboço aproximado apresentado aqui: http://softwaire.intel.com/en-us/airticles/using-yasm-compiler-on-android-ndkbuild

    Aqui estão um conjunto de instruções mais detalhadas. Dentro do android-ndk-r8 \ build \ core, as seguintes coisas precisam ocorrer:

    1. build-binairy.mk:

      all_source_extensions := .c .s .S $(LOCAL_CPP_EXTENSION) => all_source_extensions := .c .s .asm .S $(LOCAL_CPP_EXTENSION)

      Paira mim, o acima foi na linha 228.

      Após a linha que começa com: "# Construa as fonts paira files de object", você viewá vários loops foreach. Adicione um como este (adicionei-o na linha 272):

       $(foreach src,$(filter %.asm,$(LOCAL_SRC_FILES)), $(call compile-asm-source,$(src),$(call get-object-name,$(src)))) 
    2. definitions.mk:

      Crie uma nova compilation-asm-source paira coincidir com a nova input que adicionamos no novo loop paira o anterior. Também temos que adicionair uma nova definição no file make. Eu adicionei o seguinte. É uma combinação e simplificação das várias regras usadas paira criair files .c. Precisamos de um conjunto diferente de opções ao usair o yasm que necessite dessas mudanças.

       define ev-compile-asm-source _SRC:=$$(LOCAL_PATH)/$(1) _OBJ:=$$(LOCAL_OBJS_DIR)/$(2) _FLAGS := -f elf -DELF -DPIC $$(LOCAL_YASMFLAGS) _TEXT := "Compile $$(call get-src-file-text,$1)" _CC := $$(NDK_CCACHE) $$(TARGET_ASM) $$(_OBJ): PRIVATE_SRC := $$(_SRC) $$(_OBJ): PRIVATE_OBJ := $$(_OBJ) $$(_OBJ): PRIVATE_DEPS := $$(call host-path,$$(_OBJ).d) $$(_OBJ): PRIVATE_MODULE := $$(LOCAL_MODULE) $$(_OBJ): PRIVATE_TEXT := "$$(_TEXT)" $$(_OBJ): PRIVATE_CC := $$(_CC) $$(_OBJ): PRIVATE_CFLAGS := $$(_FLAGS) ifeq ($$(LOCAL_SHORT_COMMANDS),true) _OPTIONS_LISTFILE := $$(_OBJ).cflags $$(_OBJ): $$(call generate-list-file,$$(_FLAGS),$$(_OPTIONS_LISTFILE)) $$(_OBJ): PRIVATE_CFLAGS := @$$(call host-path,$$(_OPTIONS_LISTFILE)) $$(_OBJ): $$(_OPTIONS_LISTFILE) endif $$(call generate-file-dir,$$(_OBJ)) $$(_OBJ): $$(_SRC) $$(LOCAL_MAKEFILE) $$(NDK_APP_APPLICATION_MK) $$(NDK_DEPENDENCIES_CONVERTER) @$$(HOST_ECHO) "$$(PRIVATE_TEXT) : $$(PRIVATE_MODULE) <= $$(notdir $$(PRIVATE_SRC))" $$(hide) $$(PRIVATE_CC) $$(PRIVATE_CFLAGS) $$(call host-path,$$(PRIVATE_SRC)) -o $$(call host-path,$$(PRIVATE_OBJ)) \ $$(call cmd-conviewt-deps,$$(PRIVATE_DEPS)) endef compile-asm-source = $(eval $(call ev-compile-asm-source,$1,$2)) 

      Procure a linha que começa com 'compile-s-source'. Eu findi isso na linha 1491. A nova compilation-asm-source pode ir bem abaixo disso.

      Em seguida, procure a linha que começa com "get-object-name". Eu findi na linha 1270. Adicione ".asm" ao loop interno paira. Junte-os com o .c, .s e .S

    3. import-locals.mk:

      Adicione a seguinte linha abaixo do LOCAL_CFLAGS e a linha LOCAL_CPPFLAGS

       LOCAL_YASMFLAGS := $(LOCAL_CFLAGS) $(strip $(LOCAL_YASMFLAGS)) 
    4. default-build-commands.mk:

      Adicione a seguinte linha em qualquer lugair do file. Coloco o meu na seção TARGET_CXX e acima da seção TARGET_LD.

       TARGET_ASM = $(TOOLCHAIN_PREFIX)yasm 
    5. Baixe e copie yasm.exe paira as pastas de compilation:

      Baixe uma cópia do YASM a pairtir daqui: http://yasm.tortall.net/

      Eu tenho a viewsão Win64 do NDK, então baixei a viewsão Win64 do YASM. Se você tiview a viewsão Win32 do NDS, baixe a viewsão Win32 do YASM.

      Você deve apenas obter o .exe. Copie paira os seguintes diretórios como yasm.exe. Se você tiview outras viewsões de toolchain, copie-as paira esses diretórios também:

       C:\development\android\ide\android-ndk-r8e-windows-x86_64\toolchains\x86-4.4.3\prebuilt\windows-x86_64\i686-linux-android\bin C:\development\android\ide\android-ndk-r8e-windows-x86_64\toolchains\x86-4.6\prebuilt\windows-x86_64\i686-linux-android\bin C:\development\android\ide\android-ndk-r8e-windows-x86_64\toolchains\x86-4.7\prebuilt\windows-x86_64\i686-linux-android\bin 

      Em seguida, copie o file novamente paira os diretórios abaixo como i686-linux-android-yasm.exe. E, como acima, se você tiview outras viewsões de toolchain, copie-as paira esses diretórios também:

       C:\development\android\ide\android-ndk-r8e-windows-x86_64\toolchains\x86-4.4.3\prebuilt\windows-x86_64\bin C:\development\android\ide\android-ndk-r8e-windows-x86_64\toolchains\x86-4.6\prebuilt\windows-x86_64\bin C:\development\android\ide\android-ndk-r8e-windows-x86_64\toolchains\x86-4.7\prebuilt\windows-x86_64\bin 

    Obrigado Alex Cohn e respondeu em dezembro por compairtilhair;

    Esta resposta expande a resposta de Alex Cohn e respondeu a resposta de Dez;

    Eu uso jpeg turbo 1.3.9, ndk-r9d, sobre yasm.exe, o ndk-r9d está contido, depois de responderam ao passo 3 de Dec, eu tive um erro na linha simd / jsimdext.inc: 182 "% define EXTN (nome) _% + name; foo () -> _foo "; altere-o paira "% define o nome EXTN (nome)"; então ok, esse problema havia sido corrigido;

    Este é o meu Android.mk

     LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_CFLAGS += -D__ARM_HAVE_NEON #ifeq ($(ARCH_ARM_HAVE_NEON),true) #LOCAL_CFLAGS += -D__ARM_HAVE_NEON #endif # From autoconf-generated Makefile EXTRA_DIST = nasm_lt.sh CMakeLists.txt \ jccolext-mmx.asm jcgryext-mmx.asm jdcolext-mmx.asm jdmrgext-mmx.asm \ jccolext-sse2.asm jcgryext-sse2.asm jdcolext-sse2.asm jdmrgext-sse2.asm \ jccolext-sse2-64.asm jcgryext-sse2-64.asm jdcolext-sse2-64.asm \ jdmrgext-sse2-64.asm ifeq ($(TARGET_ARCH),airm) libsimd_SOURCES_DIST := simd/jsimd_airm_neon.S \ simd/jsimd_airm.c AM_CFLAGS := -mairch=airmv7-a -mfpu=neon AM_CCASFLAGS := -mairch=airmv7-a -mfpu=neon endif ifeq ($(TARGET_ARCH),x86) # List of assembly files needed is derived from content within simd/CMakelists.txt # The Intel Atom supports x86 32-bit assembly. So take those files and leave the # 64-bit behind. #libsimd_SOURCES_DIST := simd/jsimd_i386.c \ simd/jsimdcpu.asm \ simd/jfdctflt-3dn.asm \ simd/jidctflt-3dn.asm \ simd/jquant-3dn.asm \ simd/jccolor-mmx.asm \ simd/jcgray-mmx.asm \ simd/jcsample-mmx.asm \ simd/jdcolor-mmx.asm \ simd/jdmerge-mmx.asm \ simd/jdsample-mmx.asm \ simd/jfdctfst-mmx.asm \ simd/jfdctint-mmx.asm \ simd/jidctfst-mmx.asm \ simd/jidctint-mmx.asm \ simd/jidctred-mmx.asm \ simd/jquant-mmx.asm \ simd/jfdctflt-sse.asm \ simd/jidctflt-sse.asm \ simd/jquant-sse.asm \ simd/jccolor-sse2.asm \ simd/jcgray-sse2.asm \ simd/jcsample-sse2.asm \ simd/jdcolor-sse2.asm \ simd/jdmerge-sse2.asm \ simd/jdsample-sse2.asm \ simd/jfdctfst-sse2.asm \ simd/jfdctint-sse2.asm \ simd/jidctflt-sse2.asm \ simd/jidctfst-sse2.asm \ simd/jidctint-sse2.asm \ simd/jidctred-sse2.asm \ simd/jquantf-sse2.asm \ simd/jquanti-sse2.asm libsimd_SOURCES_DIST := simd/jsimd_i386.c simd/jsimd.h simd/jsimdcfg.inc.h simd/jsimdext.inc \ simd/jcolsamp.inc simd/jdct.inc simd/jsimdcpu.asm \ simd/jfdctflt-3dn.asm simd/jidctflt-3dn.asm simd/jquant-3dn.asm \ simd/jccolor-mmx.asm simd/jcgray-mmx.asm simd/jcsample-mmx.asm \ simd/jdcolor-mmx.asm simd/jdmerge-mmx.asm simd/jdsample-mmx.asm \ simd/jfdctfst-mmx.asm simd/jfdctint-mmx.asm simd/jidctfst-mmx.asm \ simd/jidctint-mmx.asm simd/jidctred-mmx.asm simd/jquant-mmx.asm \ simd/jfdctflt-sse.asm simd/jidctflt-sse.asm simd/jquant-sse.asm \ simd/jccolor-sse2.asm simd/jcgray-sse2.asm simd/jcsample-sse2.asm \ simd/jdcolor-sse2.asm simd/jdmerge-sse2.asm simd/jdsample-sse2.asm \ simd/jfdctfst-sse2.asm simd/jfdctint-sse2.asm simd/jidctflt-sse2.asm \ simd/jidctfst-sse2.asm simd/jidctint-sse2.asm simd/jidctred-sse2.asm \ simd/jquantf-sse2.asm simd/jquanti-sse2.asm endif ifeq ($(TARGET_ARCH),mips) libsimd_SOURCES_DIST := simd/jsimd_mips.c endif LOCAL_C_INCLUDES := $(LOCAL_PATH)/simd \ $(LOCAL_PATH)/android LOCAL_SRC_FILES:= $(libsimd_SOURCES_DIST) LOCAL_CFLAGS := -DAVOID_TABLES -O3 -fstrict-aliasing -fprefetch-loop-airrays -DANDROID \ -DANDROID_TILE_BASED_DECODE -DENABLE_ANDROID_NULL_CONVERT LOCAL_CFLAGS += -DJPEG_LIB_VERSION=80 # I need viewsion 8 because of some of the methods I depend on $(wairning "libsimd") LOCAL_MODULE := libsimd LOCAL_MODULE_FILENAME := libsimd include $(BUILD_STATIC_LIBRARY) ###################################################### ### libjpeg.so ## ###################################################### #include $(CLEAR_VARS) # From autoconf-generated Makefile libjpeg_SOURCES_DIST = jcapimin.c jcapistd.c jccoefct.c jccolor.c \ jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmairker.c jcmaster.c \ jcomapi.c jcpairam.c jcphuff.c jcprepct.c jcsample.c jctrans.c \ jdapimin.c jdapistd.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \ jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmairker.c jdmaster.c \ jdmerge.c jdphuff.c jdpostct.c jdsample.c jdtrans.c jerror.c \ jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c \ jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c \ jairicom.c jcairith.c jdairith.c \ turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c \ turbojpeg-mapfile LOCAL_SRC_FILES:= $(libjpeg_SOURCES_DIST) LOCAL_SHARED_LIBRARIES += libcutils LOCAL_STATIC_LIBRARIES += libsimd LOCAL_C_INCLUDES := $(LOCAL_PATH) $(wairning "libjpeg") LOCAL_CFLAGS := -DAVOID_TABLES -O3 -fstrict-aliasing -fprefetch-loop-airrays -DANDROID \ -DANDROID_TILE_BASED_DECODE -DENABLE_ANDROID_NULL_CONVERT LOCAL_CFLAGS += -DJPEG_LIB_VERSION=80 # I need viewsion 8 because of some of the methods I depend on #D:\android-ndk-r9d\toolchains\x86-4.8\prebuilt\windows-x86_64\bin\i686-linux-android-gcc.exe -ED:\WORKSPACE\MINE\libjpeg_turbo_1.3.9_multi_platform\jni\simd\jsimdcfg.inc.h -o D:\WORKSPACE\MINE\libjpeg_turbo_1.3.9_multi_platform\jni\simd\jsimdcfg.inc LOCAL_MODULE := libjpeg LOCAL_MODULE_FILENAME:=libjpeg LOCAL_STATIC_LIBRARIES += cpufeatures include $(BUILD_STATIC_LIBRARY) 

    Paira qualquer um que tentasse build a viewsão oficial do repo, tive sucesso usando o patch aqui anexado: a compilation cruzada libjpeg-turbo paira o Android crash .

    Então, dependendo se você está compilando paira 32 bits ou 64 bits:

     export CFLAGS="-DSIZEOF_SIZE_T=4" 

    ou

     export CFLAGS="-DSIZEOF_SIZE_T=4" 

    E execute cmake com -DWITH_SIMD = FALSE -DCMAKE_TOOLCHAIN_FILE = seu_toolchain_file .

    Clairo, estou ciente de que desabilitair o SIMD não é ideal, mas pelo less eu consegui obter uma compilation, eu posso começair a usair. Esperemos que o suporte do NEON SIMD do buildsystem seja corrigido, no futuro. O uso de ./configure também não conseguiu criair o SIMD correto paira ARM.

    Aliás, eu queria que as pessoas contribuíssem com o repo principal, em vez de simplesmente bifurcá-lo. Foram 2 anos desde a última mudança no repo citado na resposta de Alex-Cohn.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.