Linux生成动态库系统
Linux生成动态库系统
一个、说明
Linux下动态库文件的扩展名为 ".so"(Shared Object)。 依照约定,全部动态库文件名称的形式是libname.so(可能在名字中增加版本)。 这样。线程函数库被称作libthread.so。 静态库的文件名称形式是libname.a。共享archive的文件名称形式是libname.sa。共享archive仅仅是一种过渡形式,帮助人们从静态库转变到动态库。小编综合自己学习体会以及网络上较好的内容。以简单的样例介绍动态库文件的生成和链接方法。操作系统:Ubuntu 14.0.4GCC版本号:4.1.3
二、库文件及測试文件代码
库文件及測试文件所在的文件夹:/home/test/program/1、 库文件名称:myLibSrc.c
/*filename: myLibSrc.c*/#include<stdio.h>#include"myLibInclude.h"intmyLibSrcFun(){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生成动态库系统的更多相关文章
- Linux下动态库生成和使用
Linux下动态库生成和使用 一.动态库的基本概念 1.动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中 ...
- Linux下编译tinyxml生成动态库
首先去到sourceforge下载tinyxml的源码,https://sourceforge.net/projects/tinyxml/?source=dlp,最新版本是2.6.2. 将下载成功的t ...
- Linux下动态库和静态库的生成和使用
1.准备头文件和源文件 hello.h #ifndef HELLO_H #define HELLO_H void hello(const char *name): #endif hello.c #in ...
- linux下生成动态库和链接动态库
1.生成动态库 src/test.h #ifndef _TEST_H_HH #define _TEST_H_HH void print(); #endif src/test.cpp #include ...
- [转]linux 调用动态库so文件
记录一个面试被问到的问题. extern 有什么用途? 除了多文件共享全局变量外还有呢? extern "C" 的功能? 我想看完这篇文章就可以知道第三个问题了. 关于动态调用动态 ...
- gcc编译工具生成动态库和静态库之一----介绍
1.库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. ...
- gcc编译工具生成动态库和静态库
一. 库的分类 1.1. 静态库(.a) 1.1.1. 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大.所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 1. ...
- 谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH
谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.ph ...
- Linux 下动态库 / 静态库(依赖)
一. 依赖动态库的动态库 libfun.so依赖动态库libtest.so(libfun.so动态库里的函数intnothing()调用了libtest.so里的intmytest()函数),而mai ...
随机推荐
- Cloudera impala简单介绍及安装具体解释
一.Impala简单介绍 Cloudera Impala对你存储在Apache Hadoop在HDFS,HBase的数据提供直接查询互动的SQL.除了像Hive使用同样的统一存储平台,Impala也使 ...
- myeclipse egit 安装失败 org.eclipse.e4.ui.css.swt.theme 0.0.0
[前言] 首先确保您可能会被安装在阅读本文之前,myeclipse egit, 见文章:http://blog.csdn.net/uikoo9/article/details/17247405 事实上 ...
- 写作Openwrt固件
启动tftp软体.并设置文件夹的固件文件(Current Dircctory)和serverIP(Service interface).server指PC机.图.: ...
- hdoj 1506&&1505(City Game) dp
// l表示从l[i]到i连续大于a[i]的最远左区间.r表示从i到r[i]连续大于a[i]的最远又区间 DP 找出 a[i] 的最远左区间和最远右区间与自己连着的比自己大的数的长度 , 然后用这个长 ...
- 单机部署redis主从备份
redis为了避免单点故障,也支持主从备份.个人在做主从备份的实验时,因为机器数量有限,一般非常少有多台机器做支撑. 本文就将叙述怎样在一台电脑上实现redis的主从备份. 同一台机器上部署多个red ...
- Oracle经常使用函数
Oracle经常使用函数 --TRUNC,TO_DATE,TO_CHAR,TO_NUMBER, SUBSTR,REPLACE.NVL .TRIM,wm_concat,upper, lower,leng ...
- 在ASP.NET2.0里打印网页指定的内容(比如打印网页里的一个Table)
原文:在ASP.NET2.0里打印网页指定的内容(比如打印网页里的一个Table) 打印指定内容: <html> <head> <script type= " ...
- linux下面的中断处理软件中断tasklet机制
參考: <Linux内核设计与实现> http://blog.csdn.net/fontlose/article/details/8279113 http://blog.chinaunix ...
- 错误 4 自定义工具错误: 无法生成服务引用“DepartMentService”的代码。请检查其他错
原文:错误 4 自定义工具错误: 无法生成服务引用"DepartMentService"的代码.请检查其他错 问题: 错误 4 自定义工具错误: 无法生成服务引用" ...
- How to recover from 'programmers burnout(转)
程序员这个压力大,节奏快,任务繁重,所以很容易令人感觉倦怠,令人感觉烦躁,郁闷,疲惫不堪. 本文将介绍的是程序员如何克服可怕的“职业倦怠”. 丰盛的早餐——身处高科技产业漩涡的我们常常会熬夜到凌晨两三 ...