ndk学习9: 动态使用共享库】的更多相关文章

动态使用共享库函数 dll_main      环境介绍 续上节代码 目录结构:   android.mk如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE    := demo LOCAL_SRC_FILES := mod1.cpp mod2.cpp mod3.cpp include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE    :=…
Android NDK 交叉编译C++代码生成.so共享库详细步骤 Android NDK 调用c++ stl 模板库(修改android.mk文件) 1  在需要调用模板库的文件前包含头文件:      #include <iostream>   #include <vector>     此时编译可能不过,需要在android.mk文件内添加:    LOCAL_C_INCLUDES :=   /home/administrator/android-ndk-r5b/source…
本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3092491.html 前面总结了静态实现JNI的方法,本文介绍如何动态实现JNI:JNI在加载时,会调用JNI_OnLoad,而卸载时会调用JNI_UnLoad,所以我们可以通过在JNI_OnLoad里面注册我们的native函数来实现JNI.下面就介绍该方法. 1 Android应用层代码 在eclipse中新建工程NdkLoad,工程文件NdkLoad.java的代码如…
0.前言     在较为复杂的项目中会利用到交叉编译得到的共享库(*.so文件).在这样的情况下便会产生下面疑问,比如:     [1]交叉编译时的共享库是否须要放置于目标板中,假设须要放置在哪个文件夹中.     [2]交叉编译时的共享库是否须要放置于宿主机中,假设须要放置于哪个文件夹中.     [3]交叉编译时怎样指定共享库     [4]程序执行时怎样查找共享库     等等问题.          博文总结了使用共享库的一般方法.并通过一个样例说明问题.假设已经有了交叉编译好的共享库,…
Date: 2014-03-14 Title: Compile Android Native Binary And Library Published: true Type: post Tags: Andoird, Develope 在Android平台上,通过NDK可以编译NativeC程序,生成原生的NativeCode.从生成的代码的使用方式来看,主要有三种形式:Native Executable Binary, Shared Dynamic Library, 以及Static Link…
本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3092812.html 本文主要介绍在ndk中添加log的方法.然后,我们就可以通过log去调试ndk. 1 添加ndk对log支持 若需要添加ndk对log的支持,只需要通过以下2步即可实现. 1.1 修改Android.mk 如生成的库文件是“.so文件”,则在Android.mk中添加如下内容: LOCAL_LDLIBS:=-L$(SYSROOT)/usr/lib -l…
目录: 手工编译动态库 ndk-build编译动态库(Eclipse环境)   手工编译静态库 老规矩还是先手工操作,知其然并知其所以然   需要用到的核心命令: gcc -g -c -fpic -Wall mod1.c mod2.c mod3.c gcc -g  -shared mod1.o mod2.o mod3.o -o libfoo.so gcc -g  -fpic -Wall -shared mod1.o mod2.o mod3.o -o libfoo.so   程序运行会优先从系统目…
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX <CMake实践>笔记三:构建静态库与动态库 及 如何使用外部共享库和头文件 五.静态库与动态库构建 读者云,太能罗唆了,一个Hello World就折腾了两个大节.OK,从本节开始,我们不再折腾Hello World了,我们来折腾Hello World的共享库. 本节的任务: 1.建立一个静态库和动…
一.原理 当在系统中调用System.loadLibrary函数时,该函数会找到对应的动态库, 然后首先试图找到"JNI_OnLoad"函数,如果该函数存在,则调用它 JNI_OnLoad可以和JNIEnv的registerNatives函数结合起来,实现动态的函数替换 二. 实战 用ndk学习17的例子继续, 下面演示动态替换TestJni中的sayHello jstring JNICALL Java_org_bing_testjni_MainActivity_sayHello (J…
1. 介绍 使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用.程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级. 程序函数库可分为3种类型:静态函数库(static libraries).共享函数库(shared libraries).动态加载函数库(dynamically loaded libraries): 1.静态函数库,是在程序执行前就加入到目…
LOCAL_PATH := $(call my-dir)//标准mk语句,指编译路径,所有mk文件第一句都是这个 /**这个模块表示引用了一个本地的静态库include $(CLEAR_VARS) //清除各种变量,因为这些变量是静态全局的,如果清除,下次编译时又会用到这些变量造成出错LOCAL_MODULE    := libopencore-amrnb  //本地静态库模块的名字,这个名字在下面编译jni时需要引用LOCAL_SRC_FILES := lib/libopencore-amrn…
转载自:http://www.eefocus.com/article/09-04/71617s.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径设置当中导致的.         具体说来,动态链接器ld.so按照下面的顺序来搜索需要的动态共享库: 1.ELF可执行文件中动态段中DT_RPATH所指定的路径.这实际上是通过一种不算很常用,…
转自: http://www.eoeandroid.com/thread-264971-1-1.html 应网友回复,答应在两天前要出一篇创建C/C++共享库的,但由于清明节假期,跟朋友出去游玩,丢手机,挂失.各种银行卡解邦(辛酸的血泪史哎::>_<::).昨天回公司后又是假期综合症做怪,所以直到今天才出望见谅.在此,提醒各位网友:外出游玩多欢乐,但也请留意个人财物.好了,下开始讨论介绍创建生成C/C++共享库的过程.      二.Android NDK编程预备之Java jni入门Hell…
原文地址:http://blog.chinaunix.net/uid-29025972-id-3855500.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径设置当中导致的. 具体说来,动态链接器ld.so按照下面的顺序来搜索需要的动态共享库: 1.ELF可执行文件中动态段中DT_RPATH所指定的路径.这实际上是通过一种不算很常用,却…
1.什么是库在windows平台和linux平台下都大量存在着库.本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不兼容的.本文仅限于介绍linux下的库. 2.库的种类linux下的库有两种:静态库和共享库(动态库).二者的不同点在于代码被载入的时刻不同.静态库的代码在编译过程中已经被载入可执行程序,因此体积较大.共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小. 3.库…
动态共享库(so)开发精悍教程 翻译并根据实际情况进行了小小修改,仅关注Linux下动态共享库(Dynamic shared library .so)的开发. 1 简单的so实例 源文件 //test1.c int test1(){    return 1;} //test2.c int test2(){    return2;} //mytest.c #include <stdio.h>int test1();int test2();int main(){    printf("r…
0.前言     在较为复杂的项目中会利用到交叉编译得到的共享库(*.so文件).在这样的情况下便会产生下面疑问,比如:     [1]交叉编译时的共享库是否须要放置于目标板中,假设须要放置在哪个文件夹中.     [2]交叉编译时的共享库是否须要放置于宿主机中,假设须要放置于哪个文件夹中.     [3]交叉编译时怎样指定共享库     [4]程序执行时怎样查找共享库     等等问题.          博文总结了使用共享库的一般方法,并通过一个样例说明问题.假设已经有了交叉编译好的共享库,…
Linux操作系统上面的动态共享库大致分为三类:   一.操作系统级别的共享库和基础的系统工具库 libc.so, libz.so, libpthread.so等等,这些系统库会被放在/lib和/usr/lib目录下面,如果是64位操作系统,还会有/lib64和/usr /lib64目录.如果操作系统带有图形界面,那么还会有/usr/X11R6/lib目录,如果是64位操作系统,还有/usr/X11R6 /lib64目录.此外还可能有其他特定Linux版本的系统库目录. 这些系统库文件的完整和版…
对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径设置当中导致的. 具体说来,动态链接器ld.so按照下面的顺序来搜索需要的动态共享库: 1.ELF可执行文件中动态段中DT_RPATH所指定的路径.这实际上是通过一种不算很常用,却比较实用的方法所设置的:编译目标代码时,可以对gcc加入链接参数“-Wl,-rpath”指定动态库搜索路径: 2.环境变…
Linux 系统上有两类根本不同的 Linux 可执行程序.第一类是静态链接的可执行程序.静态可执行程序包含执行所需的所有函数 — 换句话说,它们是“完整的”.因为这一原因,静态可执行程序不依赖任何外部库就可以运行. 第二类是动态链接的可执行程序. 静态可执行程序与动态可执行程序比较 我们可以用 ldd 命令来确定某一特定可执行程序是否为静态链接的: # ldd /sbin/sln not a dynamic executable “not a dynamic executable”是 ldd…
转载;http://blog.chinaunix.net/uid-29025972-id-3855500.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径设置当中导致的. 具体说来,动态链接器ld.so按照下面的顺序来搜索需要的动态共享库: 1.ELF可执行文件中动态段中DT_RPATH所指定的路径.这实际上是通过一种不算很常用,却比较…
对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径设置当中导致的. 具体说来,动态链接器ld.so按照下面的顺序来搜索需要的动态共享库: 1.ELF可执行文件中动态段中DT_RPATH所指定的路径.这实际上是通过一种不算很常用,却比较实用的方法所设置的:编译目标代码时,可以对gcc加入链接参数“-Wl,-rpath”指定动态库搜索路径: 2.环境变…
动态库尤其是共享库在 Linux 环境下普遍存在库文件名包含版本号的情况,比如 Linux 环境下经常会发现一个共享库的真实文件名是 libfoo.so.1.1.0,而同时会有多个指向该真实库文件的软连接短文件名:libfoo.so.1.1.libfoo.so.1.libfoo.so.那么我们在使用 GCC 开发程序时如果要用这样的共享库输出的函数,就需要到动态链接这样的共享库(我们这里不考虑静态链接的方式),那么和库文件就有很大关系.另一方面,JNA 中载入共享库,根据其文档我们一般都只使用库…
 原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各个平台的SDK,遇到了不少问题,也从中了解了不少知识,之前一直觉得没啥好写的,毕竟做了4个月的游戏开发,也没有碰上什么真正的大问题,cocos2dx的引擎包得也很好,能让人把大部分时间都关注在游戏逻辑.效果的处理上,当然,之前的libevent还是小坑一下,但是和后来遇到的相比,也算不上什么了. 我…
一.linux操作系统支持的函数库分支 静态库:libxxx.a,在编译时就将库编译进可执行程序 优点:程序的运行环境中不需要外部的函数库 缺点:可执行程序大 动态库:又称共享库,libxxx.so,在程序运行时将库加载到可执行程序中 优点:可执行程序小 缺点:程序的运行环境中必须提供相应的库 函数库目录:/lib /usr/lib 二.静态库的制作 ① 生成目标文件:gcc  -c  file.c ② 静态库的创建命令 ar ar  -cr  libfile.a  file.o -c:Cret…
一.创建共享库: 1.写源程序 xxx1.c xxx2.c.../*.c(通配符方式) 2.编译源程序,加-fpic生成.o文件 gcc -c -fpic xxx1.c xxx2.c.../*.c(通配符方式) 3.生成共享库文件 gcc -shared xxx.o -o libxxx.so 4.提供头文件,方便调用 二.使用共享库 1.写调用源程序 xxx.c 2.编译源程序,生成.o文件 3.链接共享库文件 gcc test.o -l xxx(共享库去掉lib前缀和.a后缀剩下的名字) -L…
C语言创建共享库(动态库)步骤: 创建sth.c,共享库源文件: //sth.c库源程序 unsigned long long sth(unsigned int x, unsigned int y) { return (x+y+x*y); } 创建测试文件: //test.c #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[]) { unsigned int x, y; sscanf(argv[]…
动态共享库: 首先我建立一个新的动态库: 然后不选择空项目了,因为我们普通的cpp文件 入口是main  win32入口是winmain  那么这个动态库的入口在哪里  我们就是为了看一看: 出来这样的结果: 然后我们看看他是怎么进入这个函数的,就是这个case,下面我们新建一个MFC项目: 发现一个点: 然后 我们修改那个动态库中的代码: 趁着我的动态库是加黑的  所以直接生成就行了. 因为  我们将动态库和MFC项目放到衣蛾解决方案下的  所以  就不用导入 动态库的.h文件  dll文件和…
一.整体大纲 二.共享库的制作 1. 命名规则: lib + 名字 + .so 2. 制作步骤: 1) 生成与位置无关的代码 (生成与位置无关的.o)    2) 将.o打包成共享库(动态库) 3. 发布和使用共享库: 4. 解决程序执行时动态库无法被加载的问题: 1)放到系统的库目录 中 -- 不允许使用 2)临时测试 环境变量: LD_LIBRARY_PATH=将动态库的路径设置给该变量          将设置的值, 导入到系统环境变量中: export LD_LIBRARY_PATH …
1.C语言中的链接器 (1)每个 C 语言源文件被编译后生成目标文件,这些目标文件最终要被链接在一起生成可执行文件. (2)链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接. 2.静态链接 由链接器在链接时将库的内容直接加入到可执行程序中 ①编译静态库源码:gcc –c lib.c –o lib.o ②生成静态库文件:ar –q lib.a lib.o //将 lib.o 与其他文件打包到 lib.a 中 ③使用静态库编译:gcc main.c lib.a –…