linux下c语言动态库生成方法
Linux下动态库文件的扩展名为".so"(Shared Object)。按照约定,所有动态库文件名的形式是libname.so(可能在名字中加入版本号)。静态库的文件名形式是libname.a。
本文仅以简单的例子介绍动态库文件的生成和链接方法。
一、库文件及测试文件代码
库文件及测试文件所在的目录:/root/so/
1.库文件名:myfirstso.c
#include <stdio.h>
void myfunction()
{
printf("this is a shared object\n");
}
2.测试文件名:test.c
#include <stdio.h>
int main(int argc,char *argv[])
{
myfunction();
return 0;
}
二、动态库的编译方法
编译库文件myfirstso.c:
[root@mgt so]# gcc -fPIC -shared -o libmyfirstso.so myfirstso.c
如果编译成功,会在 /root/so/下生成动态库文件:libmyfunction.so。
编译生成动态库的命令为:gcc (-fpic) -shared -o libmyfunction.so myfunction.c
-fpic 使输出的对象模块是按照可重定位地址方式生成的。
-shared指定把对应的源文件生成对应的动态链接库文件。
三、动态库的测试方法
编译测试文件test.c:
[root@mgt so]# gcc -o test test.c /root/so/libmyfirstso.so
成功编译后,生成test文件,运行test:
[root@mgt so]# ./test
this is a shared object
其中,gcc -o test test.c /root/so/libmyfirstso.so的最后一个参数指定所链接库文件的绝对路径。本例中库文件的绝对路径为:/root/so/libmyfirstso.so。 如果直接写相对路径会有错误。
当然,如果想从系统的库文件路径(通常系统函数库的位于/usr/lib下)链接动态库的话,可以先将生成的库文件拷贝至/usr/lib/下,然后再链接:
[root@mgt so]# cp libmyfirstso.so /usr/lib
[root@mgt so]# gcc -o test test.c -lmyfirstso
[root@mgt so]# ./test
this is a shared object
这里,对于链接的方法作一下解释。对于gcc -o test test.c -lmyfunction中最后一个参数- lmyfirstso, 可见传给C编译器的命令行参数并未提到函数库的完整路径名,甚至没有提到在函数库目录中该文件的完整名字!实际上,编译器被告知根据选项- lmyfirstso链接到相应的函数库(/usr/lib下,注意如果是64的系统应该是/usr/lib64),函数库的名字是libmyfirstso.so, 也就是说,"lib"部分和文件的扩展名被省略了,但在前面加了一个l。
linux下c语言动态库生成方法相关推荐
- linux动态库路径生效,Linux下如何解决动态库的链接问题
原标题:Linux下如何解决动态库的链接问题 静态库是一种以空间换取时间和移植性的做法,一些情况下确实有着一定的意义,但是一些情况下,我们自己编写的简单项目,在绝大多数的机器上不存在移植性问题,是没有 ...
- 查看linux下程序或者动态库到底依赖哪些so动态库以及对应的版本
一. ldd命令 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 # ldd /bin/ls linux-vdso.so.1 => (0x00 ...
- linux下怎么编译动态库并且调用
样例描述:我有一个main.cpp文件件,add.cpp ,add.h ,subtract.cpp ,subtract.h文件,main.cpp里面调用加法和减法的函数,把加法和减法准备编译成动态库 ...
- Unix下设计动态库的方法《精通Unix下C语言编程与项目实践》(一)
精通Unix下C语言编程与项目实践 之动态库的生成 作者:朱云翔,胡平 3.3 动态库的生成 动态库的生成可分为三个步骤,设计库源码.编译位置无关码(PIC)型.o文件和链接动态库.链接动态库的命令包 ...
- g++ 编译mysql动态库_Linux下g++编译以及使用静态库和动态库的方法详解
下面小编就为大家带来一篇Linux下g++编译与使用静态库和动态库的方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 在windows环境下,我们通常在IDE如VS的 ...
- Windows下查看exe可执行程序或dll动态库所依赖dll动态库的方法
Windows下查看exe可执行程序或dll动态库所依赖dll动态库的方法 如需转载请标明出处:http://blog.csdn.net/itas109 技术交流:129518033 文章目录 Win ...
- linux+下c语言编程项目,精通UNIX下C语言编程与项目实践
cc -I //include 目录 -L //静态库目录?动态也可以 -l //小写L,接静态库名称?动态也可以 -DXXX='"XXFF"' //-D直接定义宏 -c 只编译 ...
- 您知道Linux下C语言编程的一些注意事项吗_教育中国
您知道Linux下C语言编程的一些注意事项吗_教育中国 云风的 BLOG: 一个 C 接口设计的问题 一个 C 接口设计的问题 C 语言在本质上,参数传递都是值传递.不像 Pascal 和 C++ 可 ...
- Linux下C语言编程
第1章 Linux下C语言编程简介 本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Li ...
- 初识Linux下C语言编程
本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Linux下使用C语言编程有一个基本的了 ...
最新文章
- 扩增子统计绘图8网络图-MENA
- 机器学习+优化问题的种类、如何优化、凸优化、非凸优化、对偶问题、KKT条件
- numpy生成随机数
- php pack、unpack、ord 函数使用方法(二进制流接口应用实例)
- centos7安装mysql8.0简书_【Linux实战03】CentOS 7 下 MySQL 8.0 的安装
- android EventBus的简单使用
- 为什么要做短视频秒播优化
- 【转】cas注册后自动登录
- 手机检测归属地 java_手机号归属地离线查询- Java
- yum安装virtualbox_CentOS7安装virtualbox
- 2线性模型 r语言_多层线性模型在R语言上的实现(三)
- 极光推送java服务器端_极光推送服务器端(JAVA)
- Flutter 自定义弹幕展示样式
- 从 VI 编辑器谈操作系统起源及编辑器本质
- 24种编程语言的Hello World程序
- 临时码农敲门砖 有效 2022-10-16 (详情 见文末)
- 云服务器虚拟化搭建,虚拟化搭建云服务器
- 解耦、削峰、异步的理解
- 测量RT-Thread线程调度的时间的方法
- 可以借助Studio Display 实现旧款Macbook上的“Hey Siri”功能