热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Linux下创建和使用静态和动态库

一.创建静态库与使用:(创建静态库):1.编写源代码。这个可以想像成是一种服务或一种函数,它可以为别的程序提供
一.创建静态库与使用:
(创建静态库):

1.编写源代码。这个可以想像成是一种服务或一种函数,它可以为别的程序提供服务。

2.生成目标文件:gcc -c xxxx.c -o xxxx.o(注意,这里是用-c选项来编译)

3.使用ar命令创建静态库: ar rc libxxx.a xxxx.o

说明:libxxx.a是你想要创建静态库的名字,根据习惯在Linux下库名称是以lib开头的,以.a结尾的表示是静态库。xxxx.o则是以这个目标文件来生成静态库。




(使用静态库):

1.使用静态库需要获得两个文件:头文件:xxxx.h, 和静态库文件:libxxxx.a

2.在编译其他源文件(一些需要使用静态库中所提供的函数或服务的源文件)编译时使用:

gcc -o final xxx.c libxxxx.a




二。创建动态库(也称为共享库)与使用:

(创建动态库):

1.用 gcc 和 -fPIC 参数将源文件代码编译成.o的目标代码,这个选项生成的代码与位置无关,可以在任何地址被连接和装载。如:gcc -fPIC -Wall -g -c xxx.c -o xxx.o

2.使用-shared来创建共享库,使用以下命令及参数:

gcc -g -shared -W1,-soname,libxxx.so.1.0.0 -o libxxxx.so.1.0.0 xxxxx.o

说明:-soname,libxxx.so.1.0.0:说明soname为“libxxx.so”版本为1.0.0

注意:-W1:那个是数字1

3.创建soname连接。因为前面定义的soname为"libxxx.so",因此需要创建一个"libxxx.so"到"libxxx.so.1.0.0"的连接:

ln -sf libxxx.so.1.0.0 libxxx.so



(使用共享库):

1.需要三个文件:头文件xxx.h, 库文件:libxxx.so.1.0.0 及其链接libxxx.so

2.编译:gcc -Wall -g -c xxx.c -o xxx.o

3.连接引用动态库:gcc -g -o final xxx.o -L ./ -lxxx[这里的-lxxx是引用其共享库的名字,它是libxxx.so.1.0.0的缩写]

4.运行:注意,运行时需要指定库的搜索路径,它由一个环境变量:LD_LIBRARY_PATH指定!

LD_LIBRARY_PATH=$(pwd) ./final














推荐阅读
  • Howtobuilda./configure&&make&&makeins ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • linux下编译安装lnmp
    2019独角兽企业重金招聘Python工程师标准#######################安装依赖#####################安装必要的包:y ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
  • centos6.8 下nginx1.10 安装 ... [详细]
  • Linux下C语言的几道经典面试题小结(分享)
    本篇文章整理了几道Linux下C语言的经典面试题,相信对大家更好的理解Linux下的C语言会有很大的帮助,欢迎大家探讨指正。1、如果在Linux下使用GCC ... [详细]
  • linux 字符串数组初始化,C++字符数组初始化方法的分析
    发现了一个字符数组初始化的误区,而这个往往能导致比较严重的性能问题,分析介绍如下:往往我们在初始化一个字符数组,大概有如下几 ... [详细]
author-avatar
归零xinghx_318
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有