首页 > 系统相关 >Linux动态库

Linux动态库

时间:2023-10-03 20:24:59浏览次数:33  
标签:文件 指定 生成 编译 Linux 动态 链接

制作动态库(也称为共享库)是将可重用的代码和函数打包成单独的库,可以在多个程序中共享使用。在Linux上制作动态库涉及以下步骤:

  1. 编写源代码
    编写你的代码,并确保它们可以编译为动态库。通常,你需要将代码拆分成多个文件,每个文件对应一个模块或功能。

  2. 编译源代码
    使用合适的编译器(如gcc)将源代码编译成目标文件(.o 文件)。

    gcc -c -fpic source1.c source2.c
    

    -c 选项表示编译成目标文件,-fpic 表示生成位置无关代码,这是动态库需要的。

  3. 链接为动态库
    将目标文件链接成动态库。

    gcc -shared -o libexample.so source1.o source2.o
    

    -shared 选项表示生成共享库,-o 用于指定输出文件名。

  4. 设置库路径(可选):
    将生成的动态库所在目录添加到系统的库路径中,以便系统能够找到该动态库。

    export LD_LIBRARY_PATH=/path/to/directory/containing/library:$LD_LIBRARY_PATH
    

    或者将库文件复制到系统标准库目录,如 /usr/lib/usr/local/lib

  5. 使用动态库
    在其他程序中使用动态库,你需要在编译和链接时指定动态库。

    gcc -o my_program my_program.c -lexample -L/path/to/directory/containing/library
    

    -lexample 表示链接 libexample.so-L 用于指定动态库所在目录。

gcc编译的各类参数详解

1. 常用基本参数

  • -c: 编译源文件但不进行链接,生成目标文件。
  • -o <output>: 指定输出文件名,可以是可执行文件、目标文件等。
  • -E: 只运行预处理器,生成预处理后的代码。
  • -S: 只进行编译,生成汇编代码。

2. 选项控制编译和优化

  • -O<level>: 控制优化级别。可选的级别有 -O0(无优化), -O1(基本优化), -O2(更多优化), -O3(全部优化)。
  • -Wall: 打开所有警告选项。
  • -Werror: 将警告视为错误。
  • -std=<standard>: 指定使用的编程语言标准,如 -std=c99
  • -pedantic: 遵循严格的标准。

3. 头文件和库路径

  • -I<path>: 指定头文件的搜索路径。
  • -L<path>: 指定库文件的搜索路径。

4. 链接参数

  • -l<library>: 链接指定的库,例如 -lm 链接数学库。
  • -static: 静态链接,将所有库链接到可执行文件中。
  • -shared: 生成共享库。

5. 调试信息和符号表

  • -g: 生成调试信息,以便在调试时使用。
  • -ggdb: 生成更详细的调试信息,适用于使用 GDB 进行调试。

6. 多线程和并行编译

  • -pthread: 指定支持多线程编程,链接时需要使用。
  • -j<num>: 并行编译,可以加速编译过程。

7. 其他常用选项

  • -D<macro>: 定义宏,可以通过 -D<macro>-D<macro>=value 来定义宏。
  • -U<macro>: 取消宏定义。
  • -include <file>: 在预处理之前包含指定的文件。

标签:文件,指定,生成,编译,Linux,动态,链接
From: https://www.cnblogs.com/keep--fighting/p/17741580.html

相关文章

  • linux-scp用法
    scp(SecureCopyProtocol)是一个用于在本地系统和远程系统之间安全地传输文件的命令行工具。它基于SSH协议,能够加密传输数据,提供了对文件传输的安全支持。下面详细介绍scp的用法。1.将本地文件复制到远程主机scp[options]<local_file><username@remote_host>:<remote_pat......
  • 近期动态
    2023年10月3日最近在复习计算机基础知识,主要用于面试主要复习的材料有小林code比较深入、易于理解JavaGuide比较广泛、方便速成r2code(主要是codeSheep的技术博文)近期打算在10.10号前,刷完这四个,并且完成相应的笔记整理小林coding计算机网络操作系统mysqlredis......
  • 在linux服务器上安装scvi后无法调用GPU
    问题描述:WARNING-NoGPU/TPUfound,fallingbacktoCPU.(SetTF_CPP_MIN_LOG_LEVEL=0andrerunformoreinfo.) 解决方案: 测试如下代码,如果为True则执行第二步。importtorchprint(torch.cuda.is_available())测试如下代码importjaxprint(jax.devices......
  • 如何在Linux关闭前向其他系统用户发送自定义消息
    在先前的文章中,我们解释了 Linux 中shutdown、poweroff、halt、reboot 命令的不同之处,并揭示了在用不同的选项执行这些命令时它们实际做了什么。本篇将会向你展示如何在系统关机时向所有的系统用户发送一条自定义的消息。建议阅读:tuptime-显示Linux系统的历史和统计运行......
  • 理论的动态发展完完备与进化:数论Number Theory数域的进化史 与 Infinite Precision无
    InfinitePrecision:(0)数是什么?以有限的数元,度量与表示无限的现象、事物与状态,作为整个数学科学理论的根基。以Binary二进制为例,有{0,1},Constant/Dynamic系统建模上,两种state(状态)?0->1与1->0代表“change变化”?而Decimal十进制,有{0,1,2,3,4,5,6,7,8,9}十种数元,运算符号......
  • 【知识杂谈#1】Linux如何安装net-tools和sbin配置PATH
    1.Linux下载net-tools在Linux上下载net-tools包的方法可能会因你所使用的Linux发行版而有所不同。在某些现代的Linux发行版中,net-tools已经被弃用,而推荐使用iproute2来替代它。#对于Debian/Ubuntu系统:sudoaptinstallnet-tools#对于CentOS/RHEL系统:sudoyuminstallnet-tools#......
  • Linux 内存泄漏检测的基本原理
    一、mtrace分析内存泄露mtrace(memorytrace),是GNUGlibc自带的内存问题检测工具,它可以用来协助定位内存泄露问题。它的实现源码在glibc源码的malloc目录下,其基本设计原理为设计一个函数voidmtrace(),函数对libc库中的malloc/free等函数的调用进行追踪,由此来检测内存是否存在......
  • Linux系统中驱动之设备树添加按键驱动方法
    大家好,每日一个简单的驱动,日久方长,对Linux驱动就越来越熟悉,也越来容易学会写驱动程序。今日进行简单的按键驱动。一、Linux下按键驱动原理按键驱动和LED驱动原理上来讲基本都是一样的,都是操作GPIO,只不过一个是读取GPIO的高低电平,一个是从GPIO输出高低电平。本次实现按键输入......
  • Linux系统中驱动之设备树的platform驱动实现
    每日一个简单的驱动,日久方长,对Linux驱动就越来越熟悉,也越来容易学会写驱动程序。今日进行设备树下的platform设备驱动。前面一篇我们讲解了传统的、未采用设备树的platform设备和驱动编写方法。最新的Linux内核已经支持了设备树,因此在设备树下如何编写platform驱动就显得尤为......
  • Linux系统中驱动框架基本概述
    大家好,今天跟大家简单聊聊Linux驱动框架以及概述。一、驱动程序三种基本类型字符设备(CharDevice)块设备(BlockDevice)网络设备(NetDevice)二、设备驱动程序功能对设备初始化和释放把数据从内核传送到硬件和从硬件读取数据读取应用程序传送给设备文件的数据和回送应用程序请求的......