linux 动态链接库(.so)的生成和引用

这篇具有很好参考价值的文章主要介绍了linux 动态链接库(.so)的生成和引用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

动态链接库(.so)的生成和引用

一.简介

动态链接库:在Linux系统中,动态链接库(Dynamic Linking Library)是一种在运行时链接的共享库。相比于静态链接库,动态链接库可以在程序运行时加载,而不需要在编译时链接到程序中,这样可以减小可执行程序的大小,也方便了库的管理和更新。

动态链接库有两个主要的扩展名,分别是.so和.dll,其中.so文件是Linux系统下的动态链接库,.dll文件是Windows系统下的动态链接库。Linux系统下,动态链接库通常使用GCC编译器生成,使用-shared选项编译。在程序运行时,动态链接库会被动态地加载到内存中,多个程序可以共享同一个动态链接库,减少了内存占用和磁盘空间的使用。

动态链接库在Linux系统中被广泛使用,许多系统库和第三方库都是动态链接库,例如libc、libpthread、libssl等等。动态链接库的使用可以提高程序的可移植性、可维护性和安全性,是Linux系统下的重要特性之一。

二.动态链接库的生成

在Linux中,可以使用gcc命令将多个目标文件生成一个动态链接库(也称为共享库)。生成动态链接库的步骤如下:

--sodir
	|--so.c
	|--s0.h
	|--libtest.so
	
gcc  so.c -fPIC -shared  -L./sodir -o libtest.so 

-fPIC:生成与位置无关的代码,这是生成动态链接库所必需的。
-shared:告诉链接器生成动态链接库而不是可执行文件.
-L:指定源文件路径,源文件在当前编译路径下不需要。
-o:指定输出文件名.
so.c:参与编译的源文件.
libtest.so:lib为前缀,test为库名,.so为后缀。
注意:库名可以自由取名,但是前缀和后缀必须遵循规范,否则系统无法识别。

三.引用动态链接库

  1. 首先,我们创建一个名为 libhello.c 的源文件,其中包含了一个简单的 hello 函数:

    //libhello.c
    #include <stdio.h>
    void hello() {
        printf("Hello, world!\n");
    }
    
  2. 接着,我们使用 gcc 命令来编译这个源文件,并生成一个名为 libhello.so 的动态链接库:

    gcc -fPIC  -shared -o libhello.so libhello.c
    
  3. 现在,我们可以在另一个源文件中引用这个动态链接库,例如,我们创建一个名为 main.c 的源文件:

    //main.c
    void hello();
    
    int main() {
        hello();
        return 0;
    }
    
  4. 再编译main.c,生成可执行文件:

    gcc -o main main.c -L. -lhello
    
    -L:指定so文件所在的目录;
    -l:动态链接库名,去除前缀lib,去除后缀.so;
    
  5. 最后,执行main:

    保存信息,找不到动态链接库文件。

    linux调用动态库so文件,linux,linux,运维,服务器

    解决方法:将动态链接库所在的文件添加到环境变量中:

    export LD_LIBRARY_PATH=$(pwd)
    

    linux调用动态库so文件,linux,linux,运维,服务器

    其它解决方式:
    1.临时性的 export 环境变量=$环境变量:你要添加的路径
    2.写入/etc/profile
    3.写入到家目录的.bashrc
    4.写入到/etc/environment中文章来源地址https://www.toymoban.com/news/detail-621250.html

到了这里,关于linux 动态链接库(.so)的生成和引用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • makefile 编译动态链接库使用(.so库文件)

    动态链接库:不会把代码编译到二进制文件中,而是在运行时才去加载, 好处是程序可以和库文件分离,可以分别发版,然后库文件可以被多处共享 动态链接库 动态:动态加载 链接:二进制文件和库文件分离。 库 库文件 .so 新建一个文件TestSo 编译一下 main.cpp 写好之后我们

    2024年01月23日
    浏览(33)
  • Android Studio利用CMake生成.so文件并且可供其他项目引用

    CMake是一个主要用于CPP的构建工具。 CMake语言是平台无关的中间编译工具。同一个CMake编译规则在不同系统平台构建出不同的可执行构建文件,所有操作都是通过编译CMakeLists.txt来完成的。在Linux产生MakeFile,在Windows平台产生Visual Studio工程等。 CMake 旨在解决各平台的不同Make工

    2024年02月12日
    浏览(35)
  • Linux上x86_64架构的动态链接器 ld-linux-x86-64.so.2

    /lib64/ld-linux-x86-64.so.2 是Linux操作系统上x86_64架构的动态链接器(也称为动态链接编辑器)。它负责加载和链接在运行时(即程序启动时或之后)被引用的动态库。现在,我们来深入了解其作用和重要性: 动态链接器的作用 : 当运行一个可执行程序时,该程序可能依赖于多个动

    2024年02月02日
    浏览(37)
  • Qt6之调用Windows下vc生成的动态链接库dll

    Qt是跨平台工具,显然能和windows的动态库一起使用。 在Windows操作系统上,库以文件的形式存在,并且可以分为动态链接库(DLL) 和静态链接库两种。动态链接库文控以.dll为后缀名,静态链接库文控以.lib为后缀名。不管是动态链接库还是静态链接库,都是向它们的调用者提供变

    2024年02月09日
    浏览(29)
  • 利用android studio 生成 JNI需要的动态库so文件 图文详解

    到官网下载,此处不再陈述 JNI 是JDK里的内容,电脑上正确安装并配置JDK即可。 直接在Android studio下载(File----Settings) 工具一: AndroidStudio下载安装cmake(调试Native时会使用到LLDB,请一同勾选下载安装) 工具二: 用NDK的脚本工具使用ndk-build 新建项目,选择Native C++,如下图所

    2024年02月09日
    浏览(69)
  • 【库函数】Linux下动态库.so和静态库.a的生成和使用

    目录 🌞1. Linux下静态库和动态库的基本概念 🌞2. 动态库 🌊2.1 动态库如何生成 🌍2.1.1 文件详情 🌍2.1.2 编译生成动态库 🌊2.2 动态库如何使用 🌍2.2.1 案例 🌍2.2.2 动态库错误记录 🌞3. 静态库 🌊3.1 静态库如何生成 🌍3.1.1 文件详情 🌍3.1.2 编译生成动态库 🌊3.2 静态库如

    2024年04月25日
    浏览(21)
  • 分析linux中动态库so文件的常用方法

    在linux系统中,我们经常会遇到各种各样的动态库文件,常见的是.so后缀,那么我们应该如何分析这些文件的用途和作用呢?毕竟我们不能一知半解的“搞事情”。 首先,我们从整体上了解一下该文件的基础属性,此时可以使用file命令,示例用法如下图所示: 通过执行结果

    2024年02月09日
    浏览(30)
  • 【看表情包学Linux】软硬链接 | 软连接数 | 创建软硬链接 | 动静态库 | 生成静态库 | 生成动态库

       🤣  爆笑 教程  👉 《看表情包学Linux》👈   猛戳订阅     🔥 💭 写在前面: 上一章我们讲解了 inode,为文件系统收了尾,这几章我们充分地讲解完了文件系统的知识点,现在我们开始开始学习软硬链接了。如果没有文件系统的铺垫,想直接理解软硬链接难免有些困

    2024年02月14日
    浏览(31)
  • 网络安全---Ring3下动态链接库.so函数劫持

    1.1、原理 Unix操作系统中,程序运行时会按照一定的规则顺序去查找依赖的动态链接库,当查找到指定的so文件时,动态链接器(/lib/ld-linux.so.X)会将程序所依赖的共享对象进行装载和初始化,而为什么可以使用so文件进行函数的劫持呢? 这与LINUX的特性有关,先加载的so中的全局

    2024年02月11日
    浏览(26)
  • Android 项目调用第三方库so动态库

    在Android NDK开发中,可以通过自己编写C/C++代码来构建so动态库进行调用之外,还可以把so动态库提供给第三方使用;接下来,我将介绍在新创建的Android 项目(或已存在的Android 项目)中如何调用第三方so动态库。 关于如何进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包