android静态编译
Ⅰ QT for Android怎样设置静态编译
Qt默认的编译方式是动态编译的,但是有时候编写的程序要发布出去,带很多动态库文件是很繁琐的,此时就需要静态编译程序,Qt要实现静态编译必须库文件也是静态编译的,可以用这个命令编译静态库:
1.将C:\Qt\2010.05\qt\mkspecs\win32-g++\qmake
Ⅱ Android中静态库和共享库的区别
简单来讲:
静态库是在连接阶段直接拷贝到代码中使用的,而共享库是由加载器加载到内存,在运行时使用的。
编译出来的静态库(这里指jar包)里每个java文件对应的class文件都单独存在,可以直接导入Eclipse等IDE使用
而编译出来的共享库(jar包),内部是Android字节码Dex格式的文件,一般无法导入Eclipse等IDE使用。Android.mk中由BUILD_JAVA_LIBRARY指定生成共享BUILD_STATIC_JAVA_LIBRARY指定生成静态库。
Ⅲ Android NDK编译如何强制使用libc++.a的静态链接库
在编译命令行中,将使用的静态库文件放在源文件后面就可以了。比如: gcc -L/usr/lib myprop.c libtest.a libX11.a libpthread.a -o myprop 其中-L/usr/lib指定库文件的查找路径,编译器默认在当前目录下先查找指定的库文件。
Ⅳ 打包android的时候怎么引入一些静态库
方法1 :
人为建立上面的文件夹并将静态库拷入;
方法2 :
就是通过编译配置来做上面的动作。具体如下:
1. 将动态库的编译部分和静态库的编译部分分开;
2. 在工作目录下建立一个lib文件夹(必须是这个名字),将第三方的静态库拷贝进去,并且增加一个编译配置文件Android.mk,具体内容如下:
Android <wbr>: <wbr>编译动态库时如何引入静态库
这个编译配置文件就是要在obj下生成中间文件,供其他地方使用。
文件列表如下:
Android <wbr>: <wbr>编译动态库时如何引入静态库
3. 在工作目录下建立一个文件夹,并且将生成动态库的相关文件全部拷贝进去。这里我们起的名字是src,当然也可以起其他名字。Android.mk内容如下:
Android <wbr>: <wbr>编译动态库时如何引入静态库
这里只要直接引入第三方库就可以了。
文件列表如下:
Android <wbr>: <wbr>编译动态库时如何引入静态库
third_lib.h是静态库的头文件,test.cpp很简单,就是一个函数里面顺序调了一下静态库里开放的函数,内容如下:
Android <wbr>: <wbr>编译动态库时如何引入静态库
3. 工作目录下增加一个编译配置文件Android.mk,作用就是查找工作目录下所有的子目录中的Android.mk来编译。Android.mk的内容如下:
Android <wbr>: <wbr>编译动态库时如何引入静态库
好,工作都做完了,下面进入工作目录mm -B 试一下,可以顺利编译成功。
Ⅳ 请教个Android底层c的第三方静态库编译问题
w经济关系浩信
Ⅵ android的动态加载和静态加载的区别
两者区别:
一,静态库的使用需要:
1
包含一个对应的头文件告知编译器lib文件里面的具体内容
2
设置lib文件允许编译器去查找已经编译好的二进制代码
二,动态库的使用:
程序运行时需要加载动态库,对动态库有依赖性,需要手动加入动态库
三,依赖性:
静态链接表示静态性,在编译链接之后,
lib库中需要的资源已经在可执行程序中了,
也就是静态存在,没有依赖性了
动态,就是实时性,在运行的时候载入需要的资源,那么必须在运行的时候提供
需要的
动态库,有依赖性,
运行时候没有找到库就不能运行了
四,区别:
简单讲,静态库就是直接将需要的代码连接进可执行程序;动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。
做成静态库可执行文件本身比较大,但不必附带动态库
做成动态库可执行文件本身比较小,但需要附带动态库
五:
首先纠正所谓“静态连接就是把需要的库函数放进你的exe之中”的说法。在真实世界中,有三个概念:Use
static
libary,
static
linked
DLL,
dynamic
linked
DLL.
多数人混淆了static
libary
和
static
linked
DLL的概念,当然他们有似是而非的“相似之处”,比如都用到.lib,下面具体说明。
使用静态库(Use
static
libary)是把.lib和其他.obj一起build在目标文件中,目标文件可以是.exe,也可以是.dll或.oxc等。一般情况下,可以根本就没有“对应的”.dll
文件,如C
Run
Time(CRT)库。一个例子就是,写一个main(){},build出来并不是只有几个字节,当然有人会说那还有exe文件头呢?是,即使加上文件头的尺寸,build出的执行文件仍然“莫名的大”。实际上那多出来的部分就是CRT静态库。姑且可以把静态库.lib理解成外部程序的obj文件比较合理,它包含了函数的实现。
Ⅶ 为什么谷歌不把安卓做成方舟编译器那样的所谓静态编译,而是要采用效率低下的动态编译呢
呵呵呵呵,无知者无畏啊。问你几个问题。你为什么说谷歌的编译器效率低下呢?你有没有考虑功能变化和扩展性呢?人家在为软件的自动进化做准备。你还在原始社会换石锤。
Ⅷ android已有动态库怎么编译静态库
在eclipse工程目录下建立一个jni的文件夹
在jni文件夹中建立Android.mk和Application.mk文件
Android.mk文件:
Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。详见附件中的Android.mk。
Application.mk文件:
定义了项目的一些细节,比如APP_ABI := x86(编译X86平台库)、APP_PLATFORM := android-9(使用android-9以上的平台库)。
NDK 编译和使用静态库、动态库
情况一:编译静态库
情况二:编译动态库
情况三:编译动态库+静态库
情况四:已有第三方静态库(动态库),编译静态库(动态库)
默认所有代码和文件在$project/jni下,否则特殊说明。
情况一:编译静态库
文件Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_STATIC_LIBRARY)
文件Application.mk:
APP_MODULES :=hello-jni
情况二:编译动态库
文件Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
情况三:编译动态库+静态库
文件Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib_static
LOCAL_SRC_FILES := src.c
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib_shared
LOCAL_SRC_FILES := src2.c
LOCAL_STATIC_LIBRARIES := mylib_static
include $(BUILD_SHARED_LIBRARY)
情况四:已有第三方静态库(动态库),编译静态库(动态库)
文件Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := thirdlib1 # name it whatever
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libthird1.a # or $(so_path)/libthird1.so
#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY) #or PREBUILT_SHARED_LIBRARY
include $(CLEAR_VARS)
LOCAL_MODULE := mylib_use_thirdlib
LOCAL_SRC_FILES := src.c
LOCAL_STATIC_LIBRARIES := thirdlib1 #or LOCAL_SHARED_LIBRARY
include $(BUILD_SHARED_LIBRARY) #如果编译静态库,需要Application.mk
用cd命令移至jni目录,运行/mnt/500G/public/NDK/android-ndk-r7b/ndk-build命令,这时命令行中可能会出现编译错误,比如头文件找不到,函数找不到等等,细心找找就能改掉。
编译成功后,在工程目录下libs/x86中就会生成你想要的.so库。
Ⅸ Android NDK 把jni要调的方法编译成静态库,再转动态库,报找不到对应的函数
用那个PREBUILT_STATIC_LIBRARY 这个来配置编译好了的静态库,而不是传统的的BUILD_STATIC_LIBRARY!!
Ⅹ 如何在android使用已经有的静态库
关于编译静态库:
android.mk和xxx.cpp放在新文件夹里:
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \xxx.cpp
LOCAL_MODULE:= libx
include $(BUILD_STATIC_LIBRARY)
生成静态库libx.a文件
关于链接静态库:
有两种方法:
1、把libx.a文件放在android.mk同一目录下,添加:
LOCAL_PREBUILT_LIBS += libx.a
2、同上,添加:
include $(CLEAR_VARS)LOCAL_MODULE := libxLOCAL_SRC_FILES := libx.ainclude $(PREBUILT_STATIC_LIBRARY)LOCAL_STATIC_LIBRARIES += libx
貌似第二种是NDK里比较常见,第一种在其他的android.mk里比较常见。