出于安全考虑,我希望静态链接所有库,包括包含JNI\u OnLoad函数的本机库。我已经读到可以静态链接JNI库(http://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/invocation.html#library_version)但我用Android Studio做不到。有可能吗?
这是我目前拥有的。
在Java代码中:
System.loadLibrary("testlibrary");
在cmake makefile中:
add_library( testlibrary
STATIC
${mysources} )
target_link_libraries(testlibrary)
在C文件中:
extern "C" {
EXPORT
JNIEXPORT jint JNICALL JNI_OnLoad_testlibrary(JavaVM *vm, void *reserved) {
...
return JNI_VERSION_1_8;
}
使用Android Studio应用程序构建时失败,因为它试图找到*. so库文件:
java.lang.UnsatisfiedLinkError:dalvik.system。PathClassLoader[DexPathList[[zip file”/data/app/xxx-1/base.apk“],NativeLibraryDirectory=[/vendor/lib,/system/lib]]找不到“libtestlibrary.so”
System.loadLibrary("testlibrary");
这一行试图加载libtestlibrary.so
,显然它没有构建并打包到APK中,因为具有此名称的库是静态的:
add_library( testlibrary
STATIC
${mysources} )
在这里,您描述了目标libtestLibrary. a
,它是不可加载的,只能针对可加载的. so
链接。因此,为了达到预期的结果,您应该将testLibrary
声明为共享库,然后将其链接到另一个静态库。因此,您将获得一个可以加载到程序地址空间中的单一共享库。例如
add_library(testlibrary SHARED ${mysources})
add_library(lib1 STATIC ${lib1_src})
add_library(lib2 STATIC ${lib2_src})
...
target_link_libraries(testlibrary lib1 lib2 ...)
问题内容: 直到几周前,我还以为我知道何时创建字段和方法或。例如,当一个字段(例如另一个类的对象)对于该类的任意数量的对象是唯一的时,应将其设置为。 但是几周后,我读到了有关JVM垃圾收集的信息。 我知道字段永远不会被垃圾收集,并且始终保持在内存中,除非类加载器本身是垃圾收集的。 但是,如果我不创建该字段,至少它将被垃圾回收。 因此,在使字段/方法静态化与否之间似乎有一条 很细的界限 。 有人可以
静态库 一、Mach-O下静态库的类型 .a .o文件合集 程序代码的集合,是共享程序代码的一种方式 .framwork 苹果针对.a的一层包装 在Mac OS/iOS平台, Framework实际上是一种打包方式, 将库的二进制文件、头文件和有关的资源文件打包到一起, 方便管理和分发. Framework 可以通俗的理解为封装了共享资源的具有层次结构的文件夹。共享资源可以是 nib文件、国际化字
库是一种软件组件技术,库里面封装了数据和函数。库的使用可以使程序模块化。 Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件)。 Linux通常把库文件存放在/usr/lib或/lib目录下。 linux库文件名由:前缀lib、库名和后缀3部分组成,其中动态链接库以.so最为后缀,静态链接库通常以.a作为后缀。 在程序中使用使用静态库和动态库时,他们载入的顺序是不同的。 静
问题内容: 只是为了澄清我正在考虑的这个权利,在Java中,静态字段是整个类使用的变量/字段,还是可以用于引用该类的所有对象?非静态字段是由对象定义的变量吗?并且与对象1引用相同类的第二个对象可以具有与对象1的静态字段不同的值吗? 问题答案: 与实例变量不同,在创建该类的实例之前,可以访问该类中的静态字段或静态类变量。在运行时创建该类的实例时,将创建该类中的实例变量(非静态变量)。因此,直到创建该
我想澄清一下,在java中,静态字段是整个类使用的变量/字段,或者可以被引用该类的所有对象使用?非静态字段是由对象定义的变量?第二个对象引用与对象1相同的类,它可以对对象1的静态字段具有不同的值?
我的程序有问题。Eclipse写道: 我做错了什么?我的应用程序中有2个错误。班你能改进我的代码并解释一下吗?先谢谢你。 多边形 地聚线
3. 静态库 有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库,我们在不同的程序中都会用到libc中的库函数(例如printf),也会用到libc中的变量(例如以后要讲到的environ变量)。本节介绍怎么创建这样一个库。 我们继续用stack.c的例子。为了便于理解,我们把stack.c拆成四个程序文件(虽然实际上没太大必要),把main.c改得简单一些,
Framework静态库 既然.a是.o的集合, .framework是.a的包装, 那么说明.a就是.framework的核心 探究: 手动将.a包装成一个Framework静态库 一、准备 在OCStaticLib文件夹下准备libOCTest.a静态库 . ├── OCTest.h ├── OCTest.m ├── OCTest.o └── libOCTest.a 完整的文件目录