首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jlibfprint交叉编译

Jlibfprint交叉编译
EN

Stack Overflow用户
提问于 2018-08-30 15:39:10
回答 3查看 155关注 0票数 1

我正在尝试使用buildroot交叉编译JNI桥Jlibfprint。

是源代码。

下面是.mk文件:

代码语言:javascript
复制
JLIBFPRINT_VERSION = 775295f08174d11d39da9e327120b128ef270fc4
JLIBFPRINT_SITE = $(call github,eduardobogoni,jlibfprint,$(JLIBFPRINT_VERSION))
JLIBFPRINT_AUTORECONF = YES

JLIBFPRINT_SUBDIR = JlibFprint_jni
#JLIBFPRINT_CONF_OPTS = --enable-debug-log --enable-udev-rules=no --disable-debug-log

JLIBFPRINT_INSTALL_STAGING = YES

define PREPARE_FILES_AND_FIX_DIRECTORY
    cd $(@D)/JlibFprint_jni && \
    libtoolize
endef

JLIBFPRINT_PRE_CONFIGURE_HOOKS += PREPARE_FILES_AND_FIX_DIRECTORY

$(eval $(autotools-package))

提取、修补、更新、配置、自动重新配置、修补libtool运行,没有问题。

然后它在建筑阶段失败了:

代码语言:javascript
复制
libfprint_jni_la-jlibfprint_JlibFprint.o
In file included from jlibfprint_Device.cpp:1:0:
jlibfprint_Device.h:5:10: fatal error: jni.h: No such file or directory
 #include <jni.h>
          ^~~~~~~
compilation terminated.

然后添加到/JlibFprint_jni/src/Makefile.am中。

代码语言:javascript
复制
ADD_INCLUDES=-I/usr/lib/jvm/java-11-openjdk-amd64/include -I/usr/lib/jvm/java-11-openjdk-amd64/include/linux -I/home/mariano/buildroot/output/build/libfprint-0.7.0 -I/home/mariano/buildroot/output/build/libfprint-0.7.0/libfprint/nbis/include

现在它失败了,因为:

代码语言:javascript
复制
arm-linux-gnueabihf-g++: ERROR: unsafe header/library path used in cross-compilation: '-I/usr/lib/jvm/java-11-openjdk-amd64/include'
arm-linux-gnueabihf-g++: ERROR: unsafe header/library path used in cross-compilation: '-I/usr/lib/jvm/java-11-openjdk-amd64/include'
libtool: compile:  /home/mariano/buildroot/output/host/bin/arm-linux-gnueabihf-g++ -DPACKAGE_NAME=\"libfprint_jni\" -DPACKAGE_TARNAME=\"libfprint_jni\" -DPACKAGE_VERSION=\"1.0\" "-DPACKAGE_STRING=\"libfprint_jni 1.0\"" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"libfprint_jni\" -DVERSION=\"1.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_STRING=1 -DHAVE_IOSTREAM=1 -DHAVE_LIBFPRINT_FPRINT_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/lib/jvm/java-11-openjdk-amd64/include -I/usr/lib/jvm/java-11-openjdk-amd64/include/linux -I/home/mariano/buildroot/output/build/libfprint-0.7.0 -I/home/mariano/buildroot/output/build/libfprint-0.7.0/libfprint/nbis/include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -c jlibfprint_JlibFprint.cpp  -fPIC -DPIC -o .libs/libfprint_jni_la-jlibfprint_JlibFprint.o
Makefile:496: recipe for target 'libfprint_jni_la-jlibfprint_Device.lo' failed
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-24 18:52:16

我下载了用于ARM 32位的JDK,并将包含添加到该文件夹中。

我删除了BR2_COMPILER_PARANOID_UNSAFE_PATH=n,就像阿诺特所说的,这是错误的。而且没有问题的交叉编译。

我运行了样本,它与Upek指纹扫描仪一起工作。

票数 0
EN

Stack Overflow用户

发布于 2018-09-25 19:48:36

Jlibfprint需要一个JDK,但是Buildroot没有JDK包。因此,使用Buildroot构建Jlibfprint是行不通的。

票数 0
EN

Stack Overflow用户

发布于 2020-06-13 01:20:57

我现在正在做这个。Buildroot包含openjdk,但没有安装jni头文件,所以当使用暂存作为sysroot进行交叉编译时,事情会出错。

据我所知,jni头(jni.h和jni_md.h)仅用作类型转换,并且可以包含在没有问题的目标中。我将它们添加到sysroot中,并无问题地编译作品。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52100838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档