热门标签 | 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














推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 俗话说得好,“工欲善其事,必先利其器”。这句话不仅强调了工具的重要性,也提醒我们在任何项目开始前,准备合适的工具至关重要。本文将介绍几款C语言编程中常用的工具,帮助初学者更好地选择适合自己学习和工作的编程环境。 ... [详细]
  • 深入理解动态链接库及其应用
    本文将探讨动态链接库的基本概念,包括Windows下的动态链接库(DLL)和Linux下的共享库(Shared Library),并详细介绍如何在Linux环境中创建和使用这些库。 ... [详细]
  • 如何在Linux中实现字符设备控制
    本文详细探讨了在Linux环境下控制字符设备的方法,包括蜂鸣器和模数转换器(ADC)的实际操作案例。对于开发者来说,了解这些基础知识对于嵌入式系统的开发尤为重要。 ... [详细]
  • iTOP4412开发板QtE5.7源码编译指南
    本文详细介绍了如何在iTOP4412开发板上编译QtE5.7源码,包括所需文件的位置、编译器设置、触摸库编译以及QtE5.7的完整编译流程。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • ###问题删除目录时遇到错误提示:rm:cannotremoveusrlocaltmp’:Directorynotempty即使用rm-rf,还是会出现 ... [详细]
  • 本文介绍了在CentOS 6.4系统中安装MySQL 5.5.37时遇到的启动失败和PID文件问题,并提供了详细的解决方案,包括日志分析、权限检查等步骤。 ... [详细]
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社区 版权所有