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语言动态库生成方法相关推荐

  1. linux动态库路径生效,Linux下如何解决动态库的链接问题

    原标题:Linux下如何解决动态库的链接问题 静态库是一种以空间换取时间和移植性的做法,一些情况下确实有着一定的意义,但是一些情况下,我们自己编写的简单项目,在绝大多数的机器上不存在移植性问题,是没有 ...

  2. 查看linux下程序或者动态库到底依赖哪些so动态库以及对应的版本

    一. ldd命令 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 # ldd /bin/ls linux-vdso.so.1 => (0x00 ...

  3. linux下怎么编译动态库并且调用

    样例描述:我有一个main.cpp文件件,add.cpp ,add.h ,subtract.cpp ,subtract.h文件,main.cpp里面调用加法和减法的函数,把加法和减法准备编译成动态库 ...

  4. Unix下设计动态库的方法《精通Unix下C语言编程与项目实践》(一)

    精通Unix下C语言编程与项目实践 之动态库的生成 作者:朱云翔,胡平 3.3 动态库的生成 动态库的生成可分为三个步骤,设计库源码.编译位置无关码(PIC)型.o文件和链接动态库.链接动态库的命令包 ...

  5. g++ 编译mysql动态库_Linux下g++编译以及使用静态库和动态库的方法详解

    下面小编就为大家带来一篇Linux下g++编译与使用静态库和动态库的方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 在windows环境下,我们通常在IDE如VS的 ...

  6. Windows下查看exe可执行程序或dll动态库所依赖dll动态库的方法

    Windows下查看exe可执行程序或dll动态库所依赖dll动态库的方法 如需转载请标明出处:http://blog.csdn.net/itas109 技术交流:129518033 文章目录 Win ...

  7. linux+下c语言编程项目,精通UNIX下C语言编程与项目实践

    cc -I  //include 目录 -L //静态库目录?动态也可以 -l //小写L,接静态库名称?动态也可以 -DXXX='"XXFF"' //-D直接定义宏 -c 只编译 ...

  8. 您知道Linux下C语言编程的一些注意事项吗_教育中国

    您知道Linux下C语言编程的一些注意事项吗_教育中国 云风的 BLOG: 一个 C 接口设计的问题 一个 C 接口设计的问题 C 语言在本质上,参数传递都是值传递.不像 Pascal 和 C++ 可 ...

  9. Linux下C语言编程

    第1章 Linux下C语言编程简介 本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Li ...

  10. 初识Linux下C语言编程

    本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Linux下使用C语言编程有一个基本的了 ...

最新文章

  1. 扩增子统计绘图8网络图-MENA
  2. 机器学习+优化问题的种类、如何优化、凸优化、非凸优化、对偶问题、KKT条件
  3. numpy生成随机数
  4. php pack、unpack、ord 函数使用方法(二进制流接口应用实例)
  5. centos7安装mysql8.0简书_【Linux实战03】CentOS 7 下 MySQL 8.0 的安装
  6. android EventBus的简单使用
  7. 为什么要做短视频秒播优化
  8. 【转】cas注册后自动登录
  9. 手机检测归属地 java_手机号归属地离线查询- Java
  10. yum安装virtualbox_CentOS7安装virtualbox
  11. 2线性模型 r语言_多层线性模型在R语言上的实现(三)
  12. 极光推送java服务器端_极光推送服务器端(JAVA)
  13. Flutter 自定义弹幕展示样式
  14. 从 VI 编辑器谈操作系统起源及编辑器本质
  15. 24种编程语言的Hello World程序
  16. 临时码农敲门砖 有效 2022-10-16 (详情 见文末)
  17. 云服务器虚拟化搭建,虚拟化搭建云服务器
  18. 解耦、削峰、异步的理解
  19. 测量RT-Thread线程调度的时间的方法
  20. 可以借助Studio Display 实现旧款Macbook上的“Hey Siri”功能

热门文章

  1. Oracle 动态视图3 V$SESSION
  2. 提前防止Non-PIE错误,检测app是否包含PIE标志
  3. KVO.非常简单的键值监听模式
  4. JS面向对象的程序设计(二)
  5. Android Studio建立百度地图步骤及导航无语音解决方法
  6. Eclipse常用的一些设置
  7. Lync部署学习笔记(一)
  8. 网络学习(六)Windows XP系统之ghost安装
  9. C语言二叉树求叶子数
  10. mac下8080端口到80端口的转发