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 ...
随机推荐
- 为大型数据文件每行只能产生id
为大型数据文件每行只能产生id 4个主要思路: 1 单线程处理 2 普通多线程 3 hive 4 Hadoop 搜到一些參考资料 <Hadoop实战>的笔记-2.Hadoop输入与输出 h ...
- 编程算法 - 圆圈中最后剩下的数字(循环链表) 代码(C++)
圆圈中最后剩下的数字(循环链表) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 0,1...,n-1这n个数字排成一个圆圈, 从数字0開始 ...
- jQuery简要dom操作
文本 dom 获取标签 $(选择). 创建一个标签对象 $("标签"): 由于所有的返回jQuery对象,能够调用链(无论jQuery API 回报jQuery对象) 插入标签 内 ...
- 编写WCF服务时右击配置文件无“Edit WCF Configuration”(编辑 WCF 配置)远程的解决办法
原文:编写WCF服务时右击配置文件无“Edit WCF Configuration”远程的解决办法 今天在看<WCF揭秘>书中看到作者提出可以在一个WCF Host应用程序的App.Con ...
- Java存储区域——JVM札记<一个>
Java当虚拟机数据区域 执行数据区主要包括:方法区.堆.VM栈.本地方法栈.程序计数器. 当中方法区和栈是线程共享的区域,另外三块区域是每一个线程私有的区域.各个数据区的功能简单说明例如以下: 程序 ...
- springMVC项目异步错误处理请求Async support must be enabled on a servlet and for all filters involved in async
离github在down下一个项目,springMVC-chat.总体上有标注.这就是零配置. 这可苦了我,费尽周折,最后整合到项目现在看起来有点.出来以下的错误.红色部分.解决方法为,在web.xm ...
- win7通过配置怎么样ODBC数据源
我的系统是win7最终.找了半天也没有找到控制面板上的卷管理工具--数据源.后来在网上搜索后发现win7事实并非如此开放ODBC数据源管理,打开ODBC数据源管理方法是cmd输入命令框odbcad32 ...
- C#并行和多线程编程
5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq 5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 —— 第一天 认识Parallel 5天玩转C#并行和多线 ...
- ABP入门教程
ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...
- UVA - 10014 - Simple calculations (经典的数学推导题!!)
UVA - 10014 Simple calculations Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & ...