一.整体大纲 二.共享库的制作 1. 命名规则: lib + 名字 + .so 2. 制作步骤: 1) 生成与位置无关的代码 (生成与位置无关的.o)    2) 将.o打包成共享库(动态库) 3. 发布和使用共享库: 4. 解决程序执行时动态库无法被加载的问题: 1)放到系统的库目录 中 -- 不允许使用 2)临时测试 环境变量: LD_LIBRARY_PATH=将动态库的路径设置给该变量          将设置的值, 导入到系统环境变量中: export LD_LIBRARY_PATH …
动态库尤其是共享库在 Linux 环境下普遍存在库文件名包含版本号的情况,比如 Linux 环境下经常会发现一个共享库的真实文件名是 libfoo.so.1.1.0,而同时会有多个指向该真实库文件的软连接短文件名:libfoo.so.1.1.libfoo.so.1.libfoo.so.那么我们在使用 GCC 开发程序时如果要用这样的共享库输出的函数,就需要到动态链接这样的共享库(我们这里不考虑静态链接的方式),那么和库文件就有很大关系.另一方面,JNA 中载入共享库,根据其文档我们一般都只使用库…
一.linux操作系统支持的函数库分支 静态库:libxxx.a,在编译时就将库编译进可执行程序 优点:程序的运行环境中不需要外部的函数库 缺点:可执行程序大 动态库:又称共享库,libxxx.so,在程序运行时将库加载到可执行程序中 优点:可执行程序小 缺点:程序的运行环境中必须提供相应的库 函数库目录:/lib /usr/lib 二.静态库的制作 ① 生成目标文件:gcc  -c  file.c ② 静态库的创建命令 ar ar  -cr  libfile.a  file.o -c:Cret…
动态使用共享库函数 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    :=…
原文链接:http://www.orlion.ga/781/ 一. 多目标文件的链接 假设有两个文件:stack.c: /* stack.c */ char stack[512]; int top = -1; void push(char c) {         stack[++top] = c; } char pop(void) {         return stack[top--]; } int is_empty(void) {         return top == -1; }…
1. 介绍 使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用.程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级. 程序函数库可分为3种类型:静态函数库(static libraries).共享函数库(shared libraries).动态加载函数库(dynamically loaded libraries): 1.静态函数库,是在程序执行前就加入到目…
1.什么是静态库静态库类似windows中的静态lib 关于windows中的静态lib,可参考 Windows动态链接库DLL 特点:包含函数代码声明和实现,链接后所有代码都嵌入到宿主程序中. 只在编译时使用,执行时不再需要该静态库. 2.静态库编写示例如下:addvec.c void addvec(int* x, int* y, int*z, int n) { ; for(; i< n;++i) z[i] = x[i] + y[i]; } multvec.c void multvec(int…
静态库和动态(共享)库静态库:编译程序在编译使用库提供的功能代码的程序时将代码复制到该程序然后编译成可执行程序,这种库成为静态库共享库:共享库比静态库的处理方式更加灵活,因而其产生的可执行文件更小,其文件后缀为 .so,代表共享对象(shared object)  使用共享库链接的可执行程序只包含了它所需要的函数的表格,并没有从目标文件中复制全部的外部函数的机器代码 在可执行文件开始执行时,操作系统将外部函数的机器代码从磁盘上的共享文件复制到内存中,这个过程称为动态链接. 它使可执行文件更加精简…
转自:http://www.cnblogs.com/zlcxbb/p/6806269.html 1.什么是静态库 静态库类似windows中的静态lib 关于windows中的静态lib,可参考 Windows动态链接库DLL 特点:包含函数代码声明和实现,链接后所有代码都嵌入到宿主程序中. 只在编译时使用,执行时不再需要该静态库. 2.静态库编写示例如下:addvec.c void addvec(int* x, int* y, int*z, int n) { int i=0; for(; i<…
序言: 前面一课讲了gcc的简单入门,包括gcc编译步骤:预处理:编译:汇编:链接.今天这节课就来讲下linux的库也欢迎大家吐糟共同学习. 原理: linux系统中分为2种库:静态库和共享库.静态库是以.a后缀结尾的文件,通常是在编译的链接阶段指定静态库的位置进行编译生成可执行文件,因此生成的可执行文件在执行的时候不需要静态库的参与.动态库共享库是以.so后缀结尾的文件,通常情况下代码中有需要用到共享库的地方在编译链接阶段指定共享库的路径在执行可执行文件的时候从内存表中读取代码,内存中只有一份…