导航:首页 > 源码编译 > 第三方库编译到自己的程序中

第三方库编译到自己的程序中

发布时间:2022-06-24 12:31:29

❶ 如何将android的第三方jar包编译进入apk中

在你的android工程下面建一个libs文件夹,然后把第三方jar包拷贝进去。
右键点击libs文件夹,选择Build Path —— Use as Source Folder
再运行试试。

❷ 如何将第三方类库编译自己的动态库文件中

随着动态库的流行,静态库越来越少了(关于动态库和静态库的介绍请点击),但是不排除项目中有些依赖的第三方还是使用的静态库。

那么这种情况下就可以考虑,将第三方静态库做一个二次封装。一来和业务代码进行隔离,方便以后第三方库的升级,二来将静态库封装进动态库里便于管理和利用动态库的优势。一般情况下,用动态库封装静态库很简单,就是将静态库直接拖进动态库的工程里,直接编译即可。但是有一种情况下这么做是不行的,需要暴露静态库的头文件,也就是虽然静态库放在动态库里面了,但是静态库的头文件还要提供给上层应用调用。

❸ 安卓工程怎么利用第三方库,就是自己用C++编写的编码解码程序,对图片进行编码解码

你可以尝试将构造函数和析构函数一起导出,并且,将编译DLL文件时生成的LIB文件添加到调用DLL的项目中.
如果还不行,请将定义DLL的头文件贴出来分析.
------------------------------------------------------------------
补充:
MFC扩展DLL只能由MFC的应用程序调用,请问你调用DLL的程序是什么类型?

❹ vs 封装静态库怎样把第三方库编译进去

在企业开发中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,不想被外界知道,所以会把核心代码打包成静态库,只暴露头文件给程序员使用(比如:友盟、网络地图等第三方的sdk) 静态库和动态库的存在形式 静态库:.a 和 .framework 动...

❺ 如何在Makefile.am中引入第三方so库

如果只有so,没有a文件和h头文件,那么你需要知道so开放出来的函数。 比如so提供的函数有open 。close。那么:
1 在你的源程序中需要先使用dlopen函数打开这个so库。
2 在源程序中使用dlsym函数拿到开放出来的函数(open close)。拿到函数指针后,就可以调用so里面的函数了。
dlopen dlsym是linux的库函数。
你是通过源代码编译过来的,你可以把所有源码生成静态库文件(非so动态库),然后使用库的头文件和你的程序进行编译,编译完后连接静态库文件就可以运行了。

❻ ndk-Android NDk 怎么编译时动态链接第三方so库,有头文件

问题描述:Android如何调用第三方SO库;
已知条件:SO库为Android版本连接库(*.so文件),并提供了详细的接口说明;
已了解解决方案:
1.将SO文件直接放到libs/armeabi下,然后代码中System.loadLibrary("xxx");再public native static int xxx_xxx_xxx();接下来就可以直接调用xxx_xxx_xxx()方法;
2.第二种方案,创建自己的SO文件,在自己的SO文件里调用第三方SO,再在程序中调用自己的SO,这种比较复杂,需要建java类文件,生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,最后用android NDK开发包中的ndk-build脚本生成对应的.so共享库;
求解:
1.上面两种方案是否可行?不可行的话存在什么问题?
2.两种方案有什么区别?为什么网上大部都是用的第二种方案?
3.只有一个*.so文件,并提供了详细的接口说明,是否可在ANDROID中使用它?

首先要看这个SO是不是JNI规范的SO,比如有没有返回JNI不直接支持的类型。也就是说这个SO是不是可以直接当作JNI来调用。如果答案是否定的,你只能选第二个方案。

如果答案是肯定的,还要看你是不是希望这个SO的库直接暴露给JAVA层,如果答案是否定的,你只能选第二个方案,比如你本身也是一个库的提供者。

一般如果你只有SO,就说明这个是别人提供给你的,你可以要求对方给你提供配套的JAVA调用文件。

1、这个要看这个SO是不是符合JNI调用的规范。还要看你自己的意愿。
2、因为第二种方法最灵活,各种情况都可以实现。
3、可以

看能不能直接从JAVA调用的最简单的方法就是看SO里的函数名是不是Java_XXX_XXX_XXX格式的
是就可以,你可以自己写一个配套的JAVA文件,注意一下SO函数名和JAVA函数名的转换规则,或者向SO提供方索要;
不是的话就选第二种方案吧。

1、检查所需文件是否齐全
使用第三方动态库,应该至少有2个文件,一个是动态库(.so),另一个是包含
动态库API声明的头文件(.h)
2、封装原动态库
原动态库文件不包含jni接口需要的信息,所以我们需要对其进行封装,所以我
们的需求是:将libadd.so 里面的API封装成带jni接口的动态
3、编写库的封装函数libaddjni.c
根据前面生成的com_android_libjni_LibJavaHeader.h 文件,编写libaddjni.c,用
来生成libaddjni.so

Android中集成第三方软件包(.jar, .so)

Android中可能会用到第三方的软件包,这包括Java包.jar和Native包.so。jar包既可通过Eclipse开发环境集成,也可通过编译源码集成,看你的工作环境。

假定自己开发的程序为MyMaps,需要用到BaiMaps的库,包括mapapi.jar和libBMapApiEngine_v1_3_1.so。

一、Eclipse中集成第三方jar包及.so动态库

MyMaps工程下创建目录libs以及libs/armeabi,把mapapi.jar放在的libs/目录下,把libBMapApiEngine_v1_3_1.so放在libs/armeabi/下。

Eclipse中把第三方jar包mapapi.jar打包到MyMaps的步骤:

1. 右击工程,选择Properties;
2. Java Build Path,选择Libraries;
3. Libraries页面点击右面按钮“Add Library…”;
4. 选择“User Library”,点击“Next”;
5. 点击“User Libraries”按钮;
6. 在弹出界面中,点击“New…”;
7. 输入“User library name”,点击“OK”确认;
8. 返回之后,选择刚刚创建的User library,右面点击“AddJARs”;
9. 选择MyMaps/libs/下的mapapi.jar;
10. 确认,返回。

这样,编译之后,该jar包就会被打进MyMaps.apk中,libBMapApiEngine_v1_3_1.so也被打包在lib/armeabi/中。
程序运行过程中,libBMapApiEngine_v1_3_1.so被放在/data/data/<yourAppPackage>/lib/下,加载动态库时系统会从程序的该lib/目录下查找.so库。

二、源码中集成第三方集成jar包及.so动态库

Android源码中MyMaps放在packages/apps下。MyMaps下创建目录libs以及libs/armeabi,并把mapapi.jar放在libs/,把libBMapApiEngine_v1_3_1.so放在libs/armeabi。

2.1 修改Android.mk文件

Android.mk文件如下:

[plain] view plain
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_STATIC_JAVA_LIBRARIES := libmapapi

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_PACKAGE_NAME := MyMaps

include $(BUILD_PACKAGE)

##################################################
include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=libmapapi:libs/mapapi.jar
LOCAL_PREBUILT_LIBS :=libBMapApiEngine_v1_3_1:libs/armeabi/libBMapApiEngine_v1_3_1.so
LOCAL_MODULE_TAGS := optional
include $(BUILD_MULTI_PREBUILT)

# Use the following include to make our testapk.
include $(callall-makefiles-under,$(LOCAL_PATH))

1 集成jar包
LOCAL_STATIC_JAVA_LIBRARIES取jar库的别名,可以任意取值;
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES指定prebuiltjar库的规则,格式:别名:jar文件路径。注意:别名一定要与LOCAL_STATIC_JAVA_LIBRARIES里所取的别名一致,且不含.jar;jar文件路径一定要是真实的存放第三方jar包的路径。
编译用BUILD_MULTI_PREBUILT。
2 集成.so动态库
LOCAL_PREBUILT_LIBS指定prebuilt so的规则,格式:别名:so文件路径。注意:别名一般不可改变,特别是第三方jar包使用.so库的情况,且不含.so;so文件路径一定要是真实的存放第三方so文件的路径。
编译拷贝用BUILD_MULTI_PREBUILT。

2.2 加入到GRANDFATHERED_USER_MODULES

在文件user_tags.mk中,把libBMapApiEngine_v1_3_1加入到GRANDFATHERED_USER_MODULES中

[plain] view plain
GRANDFATHERED_USER_MODULES += \
… \
libBMapApiEngine_v1_3_1

user_tags.mk可以是build/core下的,也可以是$(TARGET_DEVICE_DIR)下的,推荐修改$(TARGET_DEVICE_DIR)下的。

2.3 编译结果

MyMaps.apk编译生成在out/target/proct/<YourProct>/system/app/下;
libBMapApiEngine_v1_3_1.so放在out/target/proct/<YourProct>/system/lib/下,这也是系统加载动态库时搜索的路径。

❼ 开发中怎样才能把第三方的块加载到自己的项目中来呢

你好,很高兴为你解答。可以用于 require 控制加载模块的表,引用到自己的项目中。
1.这张表内的每一项都是一个 查找器函数。 当查找一个模块时, require 按次序调用这些查找器, 并传入模块名(require 的参数)作为唯一的一个参数。 此函数可以返回另一个函数(模块的 加载器)加上另一个将传递给这个加载器的参数。 或是返回一个描述为何没有找到这个模块的字符串 (或是返回 nil 什么也不想说)。
Lua 用四个查找器函数初始化这张表。
第一个查找器就是简单的在 package.preload 表中查找加载器。
第二个查找器用于查找 Lua 库的加载库。 它使用储存在 package.path 中的路径来做查找工作。 查找过程和函数 package.searchpath 描述的一致。
第三个查找器用于查找 C 库的加载库。 它使用储存在 package.cpath 中的路径来做查找工作。 同样, 查找过程和函数 package.searchpath 描述的一致。 例如,如果 C 路径是这样一个
2.查找器查找模块 foo 会依次尝试打开文件 ./foo.so,./foo.dll, 以及 /usr/local/foo/init.so。 一旦它找到一个 C 库, 查找器首先使用动态链接机制连接该库。 然后尝试在该库中找到可以用作加载器的 C 函数。 这个 C 函数的名字是 "luaopen_" 紧接模块名的字符串, 其中字符串中所有的下划线都会被替换成点。 此外,如果模块名中有横线, 横线后面的部分(包括横线)都被去掉。 例如,如果模块名为 a.b.c-v2.1, 函数名就是 luaopen_a_b_c。
3.第四个搜索器是一体化加载器。 它从 C 路径中查找指定模块的根名字。 例如,当请求 a.b.c时, 它将查找 a 这个 C 库。 如果找得到,它会在里面找子模块的加载函数。 在我们的例子中,就是找luaopen_a_b_c。 利用这个机制,可以把若干 C 子模块打包进单个库。 每个子模块都可以有原本的加载函数名。
除了第一个(预加载)搜索器外,每个搜索器都会返回 它找到的模块的文件名。 这和 package.searchpath 的返回值一样。 第一个搜索器没有返回
在指定 path 中搜索指定的 name 。
4.路径是一个包含有一系列以分号分割的 模板 构成的字符串。 对于每个模板,都会用 name 替换其中的每个问号(如果有的话)。 且将其中的 sep (默认是点)替换为 rep (默认是系统的目录分割符)。 然后尝试打开这个文件名。
例如,如果路径是字符串
返回第一个可以用读模式打开(并马上关闭该文件)的文件的名字。 如果不存在这样的文件,返回 nil 加上错误消息。 (这条错误消息列出了所有尝试打开的文件名。)
加载一个模块。 这个函数首先查找 package.loaded 表, 检测 modname 是否被加载过。 如果被加载过,require 返回 package.loaded[modname] 中保存的值。 否则,它试着为模块寻找 加载器 。

❽ 如何将第三方静态库编译到自己的静态库中

我记得有个选项能包进去的,好像是/ASSEMBLYMODULE

❾ C++怎样把第三方库隐藏在实现下面

编译时包含第三方库的头文件,如果第三方库包含lib文件,则在链接时将第三方库链接到你自己的程序里面即可。

❿ linux下将程序中用到的第三方库编译到自己的程序中

举例,头文件名 abc.h 函数名为 abc_test(); 第三方库头文件目录为/abc/include/ 链接库目录为/abc/lib/ 1、头文件和源文件:这是最好的情况,引用头文件和相关函数即可。 如:#include "abc.h" abc_test();//直接调用即可 编译时,Makefile中加入编译选项 -I/abc/include 为了能将库的头文件引进来。 而且你的程序运行时,不再需要这个第三方库。 2、静态链接库:引用头文件和相关函数,设提供的静态库名为 libabc.lib 编译时,Makefile中加入 编译选项 1)-I/abc/include #编译时加,为了能将库的头文件引进来; 2)-L/abc/lib -labc #链接时加的 而且你的程序运行时,不再需要这个第三方库。 3、动态链接库,设动态链接库为libabc.so 调用动态链接库文件,需要dlopen等函数 编译时,Makefile中加入 编译选项 1)-I/abc/include #编译时加,为了能将库的头文件引进来; 2)-L/abc/lib -labc #链接时加的 注意:你的程序运行时,需要这个第三方库的libabc.so文件。

阅读全文

与第三方库编译到自己的程序中相关的资料

热点内容
怎么投诉途虎app 浏览:35
安卓重力感应怎么关 浏览:718
我的世界ios怎么建服务器地址 浏览:757
服务器端口ip都是什么意思 浏览:260
华为主题软件app怎么下 浏览:837
我们的图片能够收藏加密吗 浏览:978
mysql空值命令 浏览:213
python整点秒杀 浏览:882
怎么样互传app 浏览:293
python分布式抓包 浏览:36
轻量级php论坛 浏览:342
如何查看应用存储在哪个文件夹 浏览:436
app开发项目范围怎么写 浏览:76
androidjms 浏览:843
弹珠连贯解压 浏览:243
程序员的网课 浏览:904
广东加密狗防拷贝公司 浏览:450
rtf转换pdf 浏览:350
单片机退出中断 浏览:142
可以对单个内容加密的便签 浏览:825