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. 【从零学习openCV】IOS7根据人脸检测

    前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app.总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...

  2. SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件

    原文:SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件 从2005开始,就引入了"数据库邮件"功能.并且取代SQLMail.原有SQLMail ...

  3. SQL Server系统数据库备份最佳实践

    原文:SQL Server系统数据库备份最佳实践 首先了解主要的系统数据库: 系统数据库 master 包含登录信息和其他数据库的核心信息 msdb 存储作业.操作员.警报.备份还原历史.数据库邮件信 ...

  4. C# 抽象类其中创建一个静态方法

    </pre><pre name="code" class="csharp"><span style="font-size ...

  5. Java里泛型有什么作用

    1 泛型赋予了类型參数式多态的能力 2 泛型的第一个优点是编译时的严格类型检查,提高了程序的安全性和健壮性,这是集合框架最重要的特点. 3 泛型消除了绝大多数的类型转换.假设没有泛型,当你使用集合框架 ...

  6. ZOJ 3822 可能性DP

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3822 本场比赛之前,我记得.见WALK概率路DP称号.那么它应该是可以考虑 ...

  7. Android采访开发——2.通用Android基础笔试题

    注意finddreams博客: http://blog.csdn.net/finddreams/article/details/44219231 正值跳槽的热季.整理一下Android面试中最常考的笔 ...

  8. git merge简介(转)

    git merge的基本用法为把一个分支或或某个commit的修改合并现在的分支上.我们可以运行git merge -h和git merge --help查看其命令,后者会直接转到一个网页(git的帮 ...

  9. 下载文档--Struts2中国的文件下载被显示为空间的问题

    下载文档--Struts2中国人似乎是空文件下载格问题 前言:近期公司项目中用到文件下载,依据底层,决定使用struts2的文件下载模式. 乱码大多数都攻克了,竟然出现中文文件下载时,中文文字显示为空 ...

  10. c++界面设计皮肤工具

    1. 先进行软件界面设计,确定软件界面美术包装方案 2. 依据软件界面美术设计装方案制作对应的图片,图片格式请參见AUDK的帮助文档或皮肤工具SkinTool 的 Demo 3. 打开皮肤工具 Ski ...