Linux生成动态库系统

一个、说明

    Linux下动态库文件的扩展名为 ".so"(Shared Object)。

依照约定,全部动态库文件名称的形式是libname.so(可能在名字中增加版本)。

这样。线程函数库被称作libthread.so。

静态库的文件名称形式是libname.a。共享archive的文件名称形式是libname.sa。共享archive仅仅是一种过渡形式,帮助人们从静态库转变到动态库。
小编综合自己学习体会以及网络上较好的内容。以简单的样例介绍动态库文件的生成和链接方法。     
    操作系统:Ubuntu 14.0.4 
    GCC版本号:4.1.3     
 

二、库文件及測试文件代码

库文件及測试文件所在的文件夹:/home/test/program/
1、 库文件名称:myLibSrc.c
/*
filename: myLibSrc.c
*/
#include<stdio.h>
#include"myLibInclude.h"
int 
myLibSrcFun(){
        printf("There is myLibSrcFun()\n");
        return 0;
}
2、  測试文件:main.c
/*
filename: main.c
   */
 
#include<stdio.h>
#include"myLibInclude.h"
int main(intargc, char** argv){
        printf("Main function !\n");    
        //调用载入的动态库里的函数
        myLibSrcFun(); 
        return 0;
}
3、  头文件:myLibInclude.h
/*
filename: myLibInclude.h
 */
intmyLibSrcFun();//声明一下函数

三、动态库的编译方法

编译库文件 myLibSrc.c 命令例如以下:
	$ gcc myLibSrc.c -shared -o libmyLib.so
或是:$  gcc myLibSrc.c -fpic-shared -g -DDEBUG -o libmyLib.so
    假设编译成功,会在文件夹/home/test/program/ 下生成动态库文件:libmyLib.so
这里有两点须要补充说明:
A、 对于Linux操作,一般都推荐在普通用户模式下,假设须要超级用户的权限,则能够通过sudo 或是 su root ,输入root用户password切换。 鉴于个人学习使用时,同一时候非常多操作又需都须要使用root用户,因此 就直接在root用户下进行编译。 B、 编译生成动态库时的參数含义
-fpic: 使输出的对象模块可重定位地址方式生成的。 -shared:  指定把相应的源文件生成相应的动态链接库文件。

四、动态库的測试方法

编译測试文件:main.c
	$gcc–o app main.c /home/test/program/ libmyLib.so
    编译成功后执行 ./app :
	Main function !
There is myLibSrcFun() 
 
须要注意的是:
1、上面编译的命令  $gcc –o app main.c /home/test/program/ libmyLib.so
的最后一个參数是指定特定所连接库文件的绝对路径。本例中的库文件的绝对路径即为/home/test/program/ libmyLib.so
当然,假设想从系统的库文件路径(通常系统函数库都位于 /usr/lib 文件夹下)链接动态库的话,能够先将生成的 库文件 拷贝至 /usr/lib下。然后在链接:
$cp libmyLib.so  /usr/lib/libmyLib.so
$gcc –o   app  main.c -lmyLib
	这里,对于链接的方法做一下简单的解释:对于$ gcc –o   app  main.c -lmyLib 中的最后一个參数 –lmyLib 。可见传递给C的编译器的命令行參数并未提到函数库的完整路径。甚至没有提到在函数库文件夹    中该文件的完整名字!

实际上,编译器被告知依据选项  -lmyLib 链接到对应的函数库(/usr/lib 下),函数库的名字是 libmyLib.so,也就是说。“lib”部分和文件的扩展名都被省略了。但在前面加了一个 ‘l’
 
 
   
 
 
 
 

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Linux生成动态库系统的更多相关文章

  1. Linux下动态库生成和使用

    Linux下动态库生成和使用 一.动态库的基本概念 1.动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中 ...

  2. Linux下编译tinyxml生成动态库

    首先去到sourceforge下载tinyxml的源码,https://sourceforge.net/projects/tinyxml/?source=dlp,最新版本是2.6.2. 将下载成功的t ...

  3. Linux下动态库和静态库的生成和使用

    1.准备头文件和源文件 hello.h #ifndef HELLO_H #define HELLO_H void hello(const char *name): #endif hello.c #in ...

  4. linux下生成动态库和链接动态库

    1.生成动态库 src/test.h #ifndef _TEST_H_HH #define _TEST_H_HH void print(); #endif src/test.cpp #include ...

  5. [转]linux 调用动态库so文件

    记录一个面试被问到的问题. extern 有什么用途? 除了多文件共享全局变量外还有呢? extern "C" 的功能? 我想看完这篇文章就可以知道第三个问题了. 关于动态调用动态 ...

  6. gcc编译工具生成动态库和静态库之一----介绍

     1.库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. ...

  7. gcc编译工具生成动态库和静态库

    一. 库的分类 1.1. 静态库(.a) 1.1.1. 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大.所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 1. ...

  8. 谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH

    谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH  PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.ph ...

  9. Linux 下动态库 / 静态库(依赖)

    一. 依赖动态库的动态库 libfun.so依赖动态库libtest.so(libfun.so动态库里的函数intnothing()调用了libtest.so里的intmytest()函数),而mai ...

随机推荐

  1. Cocos2d-x 手机游戏《疯狂的蝌蚪》资源 “开源” win32+安德鲁斯+iOS三合一

    郝萌主倾心贡献,尊重作者的劳动成果,转载请注明出处 From郝萌主. 假设文章对您有所帮助.欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载 ...

  2. Windows Phone 独立存储资源管理器工具

    如何使用独立存储资源管理器工具 http://msdn.microsoft.com/zh-CN/library/hh286408(v=vs.92)C:\Program Files (x86)\Micr ...

  3. ubuntu12.04 残疾人游客

    为了防止陌生人登录你的ubuntu系统.例如,下面的方法,可以采用禁用 游客登录. sudo vi /etc/lightdm/lightdm.conf 在 lightdm.conf 文件末尾加入上 a ...

  4. android学习记录(三)百度地图错误---只有一个电话显示帧,没有地图内容。

    安卓开发新手百度地图,刚开始碰到一个问题,没有地图信息,还有就是它只有一帧. 如图所示: 上网寻找说是key的问题,然后又一次申请.还是不行. 最后再次看了自己的Manifest文件,发现自己的< ...

  5. [程序安装包制作] Advanced Installer 备忘

    原文:[程序安装包制作] Advanced Installer 备忘 Product Information - Product Details 这个重点是Product Version.讲这个之前, ...

  6. 启示—地点IT高管20在职场心脏经(读书笔记6)

    启示--一个IT高管20在职场心脏经 第七章  关于销售 用"最"来形容公司的销售.能够用上若干的词汇: 最牛,最累,最精,最傻,最有钱,最贱,最能吹.最能装... 1.1  销售 ...

  7. (2)虚拟机下hadoop1.1.2集群环境搭建

    hadoop集群环境的搭建和单机版的搭建差点儿相同,就是多了一些文件的配置操作. 一.3台主机的hostname改动和IP地址绑定 注意:以下的操作我都是使用root权限进行! (1)3太主机的基本网 ...

  8. SPOJ 375 树链剖分

    SPOJ太慢了,SPOJ太慢了, 题意:给定n(n<=10000)个节点的树,每条边有边权,有两种操作:1.修改某条变的边权:2.查询u,v之间路径上的最大边权. 分析:树链剖分入门题,看这里: ...

  9. OCP读书笔记(22) - 题库(ExamB)

    101.Identify two situations in which you can use Data Recovery Advisor for recovery. (Choose two.) A ...

  10. SpringData JPA的学习笔记之环境搭建

    一.环境搭建 1.加入jar包   spring jar+jpa jar +springData jar >>SpringData jar包     2.配置applicationCont ...