动态库

acl 库

僤鯓⒐⒋嵵緔 提交于 2020-04-05 18:11:37
acl 库的功能参见文章 acl介绍 及 https://github.com/zhengshuxin/acl ,本文主要讲述如何编译和使用 acl 库。 acl 下其实有四个库:lib_acl (基础库)、lib_protocol(http 和 icmp 协议库)、lib_acl_cpp(封装了 lib_acl 和 lib_protocol 两个 C 库的 C++ 版本实现,更是增加了丰富的功能)、lib_dict(封装了 bdb, cdb, Tokyo Cabinet 库的用于字典查询的库)以及 lib_tls(封装了openssl部分功能的库,主要用于 lib_acl 的 ssl 加密传输)。其中,笔者用的最多还是 lib_acl 、lib_protocol 以及 lib_acl_cpp(目前用得最多的库)三个库,所以本文主要介绍这三个库的编译与使用。 开始时 acl 库是支持 Linux、Solaris、FreeBSD 和 Windows 平台的,其它几个平台欢迎读者进行移植。 一、Linux/UNIX 平台上编译(需要使用 gcc/g++编译器及 gnu make 命令) 1、编译 lib_acl.a 库(使用 gcc 编译器) 进入 lib_acl 目录,直接运行 make,正常情况下便可在 lib 目录下生成 lib_acl.a 静态库,用户在使用 lib_acl.a

虹软人脸识别

孤街醉人 提交于 2020-04-05 15:49:50
最近我们发现很多用户在接入虹软ArcFace人脸识别SDK时,经常会遇到动态库加载失败的相关问题。本文详细介绍从编译动态库(.so)到程序调用so的整个流程,模拟在加载虹软人脸识别so文件时经常遇到的一些问题,帮助大家了解这些问题出现的原因以及解决方法。 一、 ArcFace库加载常见错误 1.1 找不到动态库 java.lang.UnsatisfiedLinkError: couldn't find "libarcsoft_face_engine.so" 原因: 在安装应用时,APK中指定的ABI目录下没有发现指定的动态库,寻找apk中动态库的规则详见 https://developer.android.google.cn/ndk/guides/abis?hl=en#aen 导致这个问题的间接原因很多,比如: Android工程中没有指定的动态库 Android工程中动态库存放位置错误 设备支持的最高ABI是armeabi-v7a,而apk只有arm64-v8a的动态库 解决方案: 确保被安装程序中包含的目标设备支持的ABI的动态库,可以解压APK检查动态库是否存在。 1.2 加载的动态库ABI不对 java.lang.UnsatisfiedLinkError: "libarcsoft_face_engine.so" is 32-bit instead of 64-bit 原因:

静态库与动态库的区别

自古美人都是妖i 提交于 2020-04-01 18:00:14
一、什么是库 库实际上是一种代码共享的方式,主要用于代码重用和源码隐藏,通常分为动态库和静态库。 静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝。 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存空间。 二、什么是.a、.bundle、.framework 在iOS中静态库以.a和.framework的形式存在,动态库以.dylib和.framework的形式存在。 之所以.framework既可能是动态库又可能是静态库,是因为苹果公司禁止用户级App使用动态库,而自己却又堂而皇之的使用动态库,这就造成了iOS中系统级的.framework是动态库,用户级的.framework是静态库。 二者区别不大,.a是纯二进制文件,.a文件不能单独使用,至少要有.h文件配合,而.framework除了二进制文件外,还包含一些资源文件(头文件,plist等),由于自身包含了头文件,所以.framework可以单独使用。 .a和.framework两种静态库,通常都是把需要用的到图片或者xib文件存放在一个bundle文件中,而该bundle文件的名字和.a或.framework的名字相同。 来源: https://www.cnblogs.com/zhang6332/p/6279288.html

静态库和动态库的区别

喜欢而已 提交于 2020-03-31 05:45:54
real framework中不可以使用类别 或 不可以不包含类文件 real framework 中直接调用NSClassFromString函数会返回null 需要强制加载指定类 或 直接通过类名引用 linux中静态库和动态库的区别 一、不同 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 1. 静态函数库 这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。 2. 动态函数库 这类库的名字一般是libxxx.so;相对于静态函数库,动态函数库在编译的时候 并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。 二、相同 都是由*.o目标文件生成 ios 开发中 动态库 与静态库的区别 使用静态库的好处 1,模块化,分工合作 2

iOS热更新实现方式

☆樱花仙子☆ 提交于 2020-03-30 07:19:13
heart.jpg 苹果静止热更新,可惜我的是企业app,没有这些约束了,随便用。(当然有些热更新已经可以通过苹果审核了,比如JSPatch)官网说的: JSPatch 平台 SDK 1.7.2 以上版本可以通过苹果审核,可以正常使用。Github 开源版本暂不可用。 最近公司要添加热修复BUG,其实早之前本人就有简单实现过,刚好契合公司需求,在此总结一下iOS热更新实现方式 这个是我根据JSPatch写的一个Demo: https://github.com/tikeyc/TJSPatchDemo 这是 Android热更新实现方式 一、JSPatch http://www.jspatch.com/ https://github.com/bang590/JSPatch 热更新时,从服务器拉去js脚本。理论上可以修改和新建所有的模块,但是不建议这样做。 建议用来做紧急的小需求和 修复严重的线上bug。 官网说: JSPatch 平台 SDK 1.7.2 以上版本可以通过苹果审核,可以正常使用。Github 开源版本暂不可用 二、lua脚本 比如:wax。热更新时,从服务器拉去lua脚本,游戏开发经常用到。 三、Weex http://weex.apache.org/cn/ https://github.com/apache/incubator-weex/ https://github

移动端APP热更新方案(iOS+Android)

我与影子孤独终老i 提交于 2020-03-30 07:17:53
出自:http://www.cnblogs.com/Creator/p/7007694.html 为什么要做热更新 当一个App发布之后,突然发现了一个严重bug需要进行紧急修复,这时候公司各方就会忙得焦头烂额:重新打包App、测试、向各个应用市场和渠道换包、提示用户升级、用户下载、覆盖安装。 重点是还会有原来的版本遗留,无论你怎么提示都有人放弃治疗,不愿意升级,强制不能使用体验又足够糟糕到让人不能启齿。 如果这是一个影响公司收入或者体验影响极其不好的Bug,那完蛋了,可能公司老板会对整个技术团队的技术能力丧失信心,其对技术人员的伤害是致命的。 最后最致命的是: 有时候仅仅是因为不小心写错了一行代码,就让所有的加班都付之东流,苦不苦,冤不冤,想想都苦。 还有一种剧情是研发总监把锅甩给测试团队,测试不过关,测试摊摊手说我也不是神啊,总会有漏网之鱼. 那能不能神不知鬼不觉再没有产生较大影响前把bug快速修复了呢? 热更新的行业情况 先来说说Android 并不是因为Android更有料就先说他,而是它的用户量级比Iphone大,我们写文章也是讲究大数据分析的不是.. Andoid端在15年热补丁就比较火,先后出现了Dexposed、AndFix,Qzone超级补丁的类Nuwa方式,微信的Tinker, 大众点评的nuwa、百度金融的rocooFix,

GCC 编译器

天大地大妈咪最大 提交于 2020-03-28 09:30:58
过程文件 后缀 含义 描述 .c 源文件 源代码 .o 源文件的目标文件 源代码预处理,编译和汇编后的二进制 .a 目标文件的归档文件 目标文件的打包,没有链接过程 .so 动态链接库文件 由目标文件或归档文件链接而成,没有程序入口,不能独立运行 .out 编译输出可执行文件 由目标文件或归档文件链接而成,有程序入口,可以独立运行 常用工具 工具 描述 gcc 通常用于完成预处理、编译、汇编、链接工作 (.c -> .o .so .out) ar 通常用于归档目标文件 (.o -> .a) 常用方法 1.生成可执行文件 gcc -o app.out main.c 2.生成动态库文件 gcc -fPIC -shared -o libfunc.so func.c 3.生成目标文件 gcc -c fun1.c fun2.c 4.生成静态库文件 ar rcs fun.a fun1.o fun2.o 常用选项 参数 描述 -I 指明头文件的包含路径 -L 指明静态库的包含路径 -l 指明静态库的名字 -Wl,-rpath= 指明运行时可以找到动态链接库的路径 -g 编译时产生调试信息 -Wall 生成所有警告信息 -On n=0~3 优化级别,-O3最高 -static 禁止使用动态库 -share 尽量使用动态库 -fPIC 产生与位置无关的代码 -c 激活预处理,编译和汇编 -o

GCC/G++选项 -Wl,-Bstatic和-Wl,-Bdynamic

坚强是说给别人听的谎言 提交于 2020-03-25 20:41:59
默认情况下,GCC/G++链接时优先链接动态库,如果没有动态库,则链接相应的静态库。同时,GCC/G++也提供了链接选项 -Wl,-Bstatic 和 -Wl,-Bdynamic 供用户指定链接动态库或者静态库。 -Wl,-Bstatic指示跟在后面的-lxxx选项链接的都是静态库,-Wl,-Bdynamic指示跟在后面的-lxxx选项链接的都是动态库。 如下, g++ -L. -o main main.cc -Wl,-Bstatic -ltest -Wl,-Bdynamic 前面的 -Wl,-Bstatic指示链接libtest.a静态库,后面的 -Wl,-Bdynamic指示链接系统动态库。 来源: https://www.cnblogs.com/myd620/p/12568948.html

静态库与动态库的区别?

笑着哭i 提交于 2020-03-23 23:41:03
一、什么是库? 库是共享程序代码的方式,一般分为静态库和动态库。 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。 三、iOS里静态库形式? .a和.framework 四、iOS里动态库形式? .dylib和.framework 五、framework为什么既是静态库又是动态库? 系统的.framework是动态库,我们自己建立的.framework是静态库。 六、a与.framework有什么区别? .a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。 .a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。 .a + .h + sourceFile = .framework。 建议用.framework. 七、为什么要使用静态库? 方便共享代码,便于合理使用。 实现iOS程序的模块化。可以把固定的业务模块化成静态库。 和别人分享你的代码库,但不想让别人看到你代码的实现。 开发第三方sdk的需要。 八、制作静态库时的几点注意: 1 注意理解:无论是.a静态库还.framework静态库,我们需要的都是二进制文件+.h+其它资源文件的形式,不同的是,.a本身就是二进制文件,需要我们自己配上

静态库与动态库

偶尔善良 提交于 2020-03-23 13:44:02
gcc工作流程和编译原理   1. 预处理 gcc -E   2. 编译 gcc -S   3. 汇编 gcc -c   4. 链接 没参数 gcc的参数   -I 指定头文件的路径   -o 指定生成的文件名   -D 在编译的时候给代码定义宏   -O 优化程序 后面跟 0 1 2 3 这是优化等级   -Wall 在程序编译的时候提示警告信息 比如定义了变量没有使用   -g 在程序中添加调试信息   -c 只编译子程序   -L 指定所用的库的目录   -l 指定库的名字 掐头去尾 静态库的制作   1>.命名规则     lib + 库的名字 + .a 例如 libmytest.a   2>.制作步骤     1). 生成对应的.o文件 --------- .c --->.o -c     2). 将生成的.o文件打包 ar rcs + 静态库的名字(libmytest.a)+ 生成的所有的.o   3>.发布和使用静态库:     1). 发布静态库     2). 头文件   4>.静态库的优缺点:(由于库在编译的时候直接被打包到应用程序中,所以会有对应的优缺点)     优点:       1).发布程序的时候,不需要提供对应的库       2).加载库的速度快     缺点:       1).库被打包到应用程序中,导致应用程序的体积很大       2)