精华内容
下载资源
问答
  • android ndk 加载so的策略

    千次阅读 2013-12-25 17:01:59
    0. 动态库加载方式: 方法1:在运行时动态链接库, 动态地将程序和共享库链接并让 Linux 在执行时加载库(动态链接,系统加载) 方法2:动态加载库并在程序控制之下使用它们。(动态加载) 动态链接(系统加载):是指在...
    0. 动态库加载方式:
    方法1:在运行时动态链接库, 动态地将程序和共享库链接并让 Linux 在执行时加载库(动态链接,系统加载)

    方法2:动态加载库并在程序控制之下使用它们。(动态加载)


    SouthEast


    动态链接(系统加载):是指在编译应用程序时,使用 -lxxx 来指定需要链接哪个库。此时,应用程序(ELF)中会指明哪些符号未被填充,且放在哪些动态库中。 LD_LIBRARY_PATH则指明动态库在哪里存放。系统会将此动态库加载到内存中使用。

    动态加载:使用dlopen打开指定的动态库。并使用>>
    也就是说:System.LoadLibrary(A),将最简单的壳子动态库加入内存。

    此壳子动态库A在onCreate()时调用dlopen将所有所需动态库加入内存(引擎,游戏)。
    在onDestory()时,则dlclose(),将动态库移出内存。

    而在循环中,游戏动态库被dlopen,dlsym取出相应几个有限的符号并调用。

    而在这些符号内,他们直接使用引擎提供的函数。因为此时引擎已经被加载入内存。所以可以使用。

    dlclose时,游戏和引擎都被移出内存。


    (注:有很多游戏,但引擎只有一个,游戏使用此共同的引擎提供的函数)


    第三方C++库的移植:
    在开发Android大型程序时,不可避免要用到很多第三方OpenSouce.而大多数第三方库采用AutoConfig,或者CMake等特定编译工具编译。现在就说说如何利用NDK将其编译成咱们能够使用的静态库或者动态库。

    现在以xiph-ogg为例,演示如何使用NDK编译这些第三方库。

    0. 准备工作:
    下载xiph>
    include $(CLEAR_VARS)
    LOCAL_ARM_MODE :=>LOCAL_SRC_FILES :=>LOCAL_CFLAGS += -I/opt/Android-NDK/android-ndk-r8b/samples/xiph/xiph/ogg/include
    #LOCAL_SHARED_LIBRARIES :=                                                                                                          
    LOCAL_LDLIBS := -llog
    #include $(BUILD_EXECUTABLE)                                                                                                        
    include $(BUILD_SHARED_LIBRARY)
    #include $(BUILD_STATIC_LIBRARY) 


    编译之:
    ../../../../../ndk-build -B V=1
    在xiph/ogg/libs/armeabi-v7a/下生成libogg.so

    libvorbisfile.so  libvorbis.so的建立也一样,Android.mk如下:
    LOCAL_PATH := $(call>LOCAL_MODULE :=>LOCAL_CFLAGS += -I/opt/Android-NDK/android-ndk-r8b/samples/xiph/xiph/vorbis/include
    LOCAL_CFLAGS += -I/opt/Android-NDK/android-ndk-r8b/samples/xiph/xiph/vorbis/lib


    LOCAL_LDLIBS := -lm
    LOCAL_LDLIBS += -logg


    #LOCAL_SHARED_LIBRARIES :=                                                                                                          
    LOCAL_LDLIBS += -llog
    LOCAL_LDLIBS += -L/opt/Android-NDK/android-ndk-r8b/samples/xiph/NDK_Build/ogg/libs/armeabi-v7a
    #include $(BUILD_EXECUTABLE)                                                                                                        
    include $(BUILD_SHARED_LIBRARY)
    #include $(BUILD_STATIC_LIBRARY)                                                                                                    

    include $(CLEAR_VARS)
    LOCAL_ARM_MODE :=>LOCAL_SRC_FILES :=>LOCAL_CFLAGS += -I/opt/Android-NDK/android-ndk-r8b/samples/xiph/xiph/ogg/include
    LOCAL_CFLAGS += -I/opt/Android-NDK/android-ndk-r8b/samples/xiph/xiph/vorbis/include
    LOCAL_CFLAGS += -I/opt/Android-NDK/android-ndk-r8b/samples/xiph/xiph/vorbis/lib

    LOCAL_LDLIBS := -lm
    LOCAL_LDLIBS += -logg
    LOCAL_LDLIBS += -lvorbis


    #LOCAL_SHARED_LIBRARIES :=                                                                                                         \
                                                                                                                                        
    LOCAL_LDLIBS += -llog
    LOCAL_LDLIBS += -L/opt/Android-NDK/android-ndk-r8b/samples/xiph/NDK_Build/ogg/libs/armeabi-v7a
    LOCAL_LDLIBS += -L/opt/Android-NDK/android-ndk-r8b/samples/xiph/NDK_Build/vorbis/libs/armeabi-v7a
    #include $(BUILD_EXECUTABLE)                                                                                                       \
                                                                                                                                        
    include $(BUILD_SHARED_LIBRARY)
    #include $(BUILD_STATIC_LIBRARY) 

    展开全文
  • 2>自己编写回测模块,这个比较简单,具体方式是,在原有逻辑基础上,一条条读取历史行情记录(例如.txt,xls,csv文件,淘宝有卖,也可以用本的TICK数据收集例子收集),回测完毕,再加载到其它第三方Python图形...
  • 程序的内存分配

    2016-11-20 15:27:00
    Linux下有一个动态链接映射区用于动态链接加载映射,Linux下从0X40000000地址开始分配此区域的空间。 二、调用惯例 调用惯例一般指如下几个方面: 1、函数参数的传递顺序和方式 2、栈的维护方式 3、名字...

    一、程序内存分配

    栈:用于维护函数调用的上下文;

    堆:容纳应用程序动态分配的内存区域。

    如下图Linux进程地址空间分布


    Linux下有一个动态链接库映射区用于动态链接库的加载映射,Linux下从0X40000000地址开始分配此区域的空间。

    二、调用惯例

    调用惯例一般指如下几个方面:

    1、函数参数的传递顺序和方式

    2、栈的维护方式

    3、名字符号的修饰策略

    常用调用惯例介绍:


    值得注意的是C++返回对象时需要两次拷贝构造函数的调用才能完成对象的返回因此开销很大,为此C++提出返回值优化技术,可以将某些情况下的拷贝减少一次,例如:

    obj_a GetOgj()

    {

    return obj_a();

    }

    转载于:https://www.cnblogs.com/luiz/p/6828835.html

    展开全文
  •  静态编译后的易语言可执行程序(exe)和动态链接(dll),运行时不再依赖任何支持文件,文件尺寸更小(相对以前的独立编译),PE结构更合理(取消了“易格式体”),加载速度更快,而且有效解决了“病毒误报”和...
  • 3.2.2 加载共享 58 3.2.3 实现原生方法 59 3.3 数据类型 64 3.3.1 基本数据类型 64 3.3.2 引用类型 64 3.4 对引用数据类型的操作 65 3.4.1 字符串操作 65 3.4.2 数组操作 67 3.4.3 NIO 操作 68 3.4.4 ...
  • linux 代码控制 自动化代码检查 sonar 代码规范 阿里巴巴Java开发规范手册 UMPAY——编码规范 日志规范 异常规范 网络 协议 TCP/IP HTTP hession file HTTPS 负载均衡 容器 JBOSS tomcat resin...
  • Maven 私有Sonatype Nexus2 SonarQube代码质量管理 SonarQube 代码质量管理平台的配置与使用 linux mysql安装 单节点 安装percona 5.7 log4j详细配置及解释 安装 Dubbo 注册中心 Zookeeper ...
  • Android 一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导开发 IOS 由苹果公司开发的移动操作系统 Webkit 一个开源的浏览器引擎,在手机上的...
  • 所有控件最后生成一个dll动态库文件,可以直接集成到qtcreator中拖曳设计使用。 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。 (二)、效果图 二、输入法 (一)、输入法V2018 未采用...
  • 代理模式详解:静态代理+JDK/CGLIB 动态代理实战 BIO,NIO,AIO 总结 容器 Java 容器常见面试题/知识点总结 (必看 ) 源码分析 :ArrayList 源码+扩容机制分析 、LinkedList 源码 、HashMap(JDK1.8)源码+底层数据...
  • 代理模式详解:静态代理+JDK/CGLIB 动态代理实战 BIO,NIO,AIO 总结 容器 Java 容器常见面试题/知识点总结 (必看 ) 源码分析 :ArrayList 源码+扩容机制分析 、LinkedList 源码 、HashMap(JDK1.8)源码+底层数据...
  • 代理模式详解:静态代理+JDK/CGLIB 动态代理实战 BIO,NIO,AIO 总结 容器 Java 容器常见面试题/知识点总结 (必看 ) 源码分析 :ArrayList 源码+扩容机制分析 、LinkedList 源码 、HashMap(JDK1.8)源码+底层数据...
  • 1.5.5 底层linux内核 21 1.6 本章小结 22 第2章 游戏开发相关android基础知识 23 2.1 游戏中的音效 23 2.1.1 游戏中的即时音效 23 2.1.2 即时音效的一个案例 24 2.1.3 背景音乐播放技术 27 ...
  • Tcl_TK编程权威指南pdf

    热门讨论 2011-03-25 09:30:55
    使用cgi创建动态页面 guestbook.cgi脚本程序 定义表单以及处理表单数据 cgi.tcl软件包 接下去的几步 第4章 tcl中的字符串处理 string命令 append命令 format命令 scan命令 binary命令 相关章节 第5章...
  • 4 动态链接与共享  9. 1. 5 覆盖  9. 2 交换  9. 3 连续内存分配  9. 3. 1 内存保护  9. 3. 2 内存分配  9. 3. 3 碎片  9. 4 分页  9. 4. 1 基本方法  9. 4. 2 硬件支持  9. 4. 3 保护  9. 4. 4 页表...
  • 精通Qt4编程(第二版)源代码

    热门讨论 2014-01-19 13:07:18
    \20.2.3 加载翻译文件 476 \20.3 语言切换 477 \20.4 小结 477 \第21章 Qt单元测试框架 478 \21.1 QTestLib框架 478 \21.1.1 QTestLib 478 \21.1.2 第一个Qt单元测试 478 \21.2 数据驱动测试 480 \21.3 GUI...
  • 精通qt4编程(源代码)

    热门讨论 2010-03-17 19:10:40
    \20.2.3 加载翻译文件 476 \20.3 语言切换 477 \20.4 小结 477 \第21章 Qt单元测试框架 478 \21.1 QTestLib框架 478 \21.1.1 QTestLib 478 \21.1.2 第一个Qt单元测试 478 \21.2 数据驱动测试 480 \21.3 GUI测试 481 ...
  • 1.1.2 已知sqrt(2)约等于1.414,要求不用数学,求sqrt(2)精确到小数点后10位 1.1.3 给定一个二叉搜索树(BST),找到树中第 K 小的节点 1.1.4 LRU缓存机制 1.1.5 关于epoll和select的区别,以下哪些说法是正确...
  • 操作系统(内存管理)

    热门讨论 2009-09-20 12:55:25
    文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半...
  • Python Cookbook

    2013-07-31 22:33:26
    第1章 文本 1 引言 1 1.1 每次处理一个字符 6 ...18.7 使用FIFO策略来缓存对象 631 18.8 实现一个Bag(Multiset)收集类型 634 18.9 在Python模拟三元操作符 637 18.10 计算素数 640 18.11 将...
  • [Oracle.11g权威指南(第2版)].谷长勇.扫描版.pdf

    千次下载 热门讨论 2013-06-23 21:16:09
    4.3.3 Oracle常用的动态性能视图 67 4.4 本章小结 67 第二部分 Oracle之SQL&PL/SQL 第5章 SQL语言介绍 70 本章主要介绍了以下内容:SQL语言概述、如何使用简单和复杂的SELECT检索语句、如何使用基本函数、如何使用...
  • 17.3 动态加载和创建程序集 17.4 应用程序域 17.5 共享程序集 17.5.1 强名 17.5.2 使用强名获得完整性 17.5.3 全局程序集缓存 17.5.4 创建共享程序集 17.5.5 创建强名 17.5.6 安装共享程序集 17.5.7 使用共享程序集 ...
  • 实现这些需求的程序称为分配程序(allocators),因为它们负责分配和回收内存。程序的动态性越强,内存管理就越重要,您的内存分配程序的选择也就更重要。让我们来了解可用于内存管理的不同方法,它们的好处与...
  • 编辑推荐通过学习《Oracle Database 10g 性能调整与优化》,读者可以了解到如何选择最优化的索引选项,有效地管理驱动器和磁盘阵列,对查询执行故障检修,以及可靠地预测将来的性能。《Oracle Database 10g 性能调整...
  •  动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面...
  • java 面试题 总结

    2009-09-16 08:45:34
    动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

linux动态库加载策略

linux 订阅