Linux和Windows修改动态库的名字

embedded/2024/9/25 21:25:24/

一、概述

        有时候我们创建windows的Dll或者Linux下的So库时候,在已经生成的产物里面我们又不想重新修改工程来修改我们动态库的名字,这个应该怎么做呢,windowslinux两个平台使用的工具不一样。比如我们有一个TestA.Dll和TestA.lib或者 TestA.so

二、知识准备

1)windows下的def文件

  概念: 动态链接库(DLL)的模块定义文件,用于在编译和链接阶段指定DLL导出函数的名称和地址

  作用: 1、指定DLL导出函数的名称和地址。在.def文件中,您可以指定哪些函数应该导出,并为它们指定名称和地址。这些导出函数可以被其他程序或DLL调用,并且可以通过GetProcAddress函数获取它们的地址。

   2、定义DLL导出函数的调用约定。在.def文件中,您可以指定导出函数使用的调用约定,如__stdcall、__cdecl等。这些调用约定规定了函数参数如何传递以及函数返回值如何处理。

   3、 管理DLL的版本和兼容性。在.def文件中,您可以指定DLL的版本号以及与其他DLL的兼容性。这有助于确保程序在升级或修改DLL时不会出现兼容性问题或冲突。

  使用场景: dll中没有在函数前面加入declspec(dllexport),需要把.def导入到VS中进行编译,否则无需使用

三、详细操作

        1、windows平台

        windows下生成dll时产生了lib文件

        概念:lib文件被称为导入库(Import Library),它包含了DLL中导出函数的符号(Symbol)和地址,用于链接DLL的文件

        作用: 动态链接库(DLL)需要一个导入库文件(.lib)来与静态链接器(linker)交互。当一个应用程序使用一个DLL时,它需要知道如何访问DLL中的函数。这些函数在编译时并不是直接链接到应用程序中的,而是在运行时从DLL中加载。为了使应用程序能够正确地调用DLL中的函数,需要一个导入库文件来告诉链接器如何在运行时定位和调用DLL中的函数。因此,在生成DLL时需要生成一个导入库文件(.lib)

        操作命令步骤:

        1)先利用pexports.exe生成def文件

           pexports.exe TestA.dll > libCccA.def

       2)打开libCccA.def 文件

           把文件内容首行把TestA 改为 libCccA

       3)用vs2019或者2022的命令行工具执行  生成.lib文件

           lib /def:libCccA.def /machine:X86 /out:libCccA.lib

         vs最后直接把TestA.dll手动改名为libCccA.dll即可

        2、linux平台修改so的名称(把libTestA.so 改为libCccA.so)

               1)  先安装patchself工具

                centos下安装 yum install pathself

                ubutu下安装aptget install pathself

                2)执行命令

                patchelf --set-soname libTestA.so libCccA.so

                参考csdn链接修改linux下so动态库的soname_修改so的soname-CSDN博客


http://www.ppmy.cn/embedded/40289.html

相关文章

c++实现数据库连接池

介绍 为提高mysql的访问性能,可增加连接池。为什么他能提高性能: mysql是基于C/S架构,从客户端到服务器,一条sql的执行流程:tcp三次握手->mysql连接认证->执行sql->关闭mysql连接->tcp四次挥手 每次数据库…

使用函数波动性优化 PostgreSQL 查询:Volatile, Stable, and Immutable

文章目录 1.overview2. Volatile函数3. Stable函数4. Immutable 函数结论 1.overview 在 PostgreSQL 中,函数的不同波动性选择——即 Volatile(易变)、Stable(稳定)和Immutable(不可变)——在查…

【玩转Google云】GCP 制品管理:Artifact Registry 使用详解

本篇博文将带您深入了解 Google Cloud Platform (GCP) 的 Artifact Registry,一个功能强大的统一制品仓库,用于存储、管理和保护您的软件制品。我们将详细介绍 Artifact Registry 的核心概念、优势以及使用步骤,帮助您轻松上手并将其集成到您的开发流程中。 目录 一、Arti…

Kubernetes最小单元Pod的生命周期

1.1 Pod生命周期 1.1.1 过程及状态 Pod 的生命周期管理是 Kubernetes 集群中非常重要的一部分,它涉及到 Pod 从创建到销毁的整个过程。下面是 Pod 生命周期中各个阶段的简要说明: Pod 创建过程:当一个 Pod 被创建时,Kubernetes 会…

【Go语言初探】(一)、Linux开发环境建立

一、操作系统选择 选择在Windows 11主机上运行的CentOS 7 Linux 虚拟机,虚拟化平台为VMWare Workstation. 二、安装Go语言环境 访问Go语言官网,选择Linux版本下载: 解压: tar -xvf go1.22.3.linux-amd64.tar.gz检验安装结果&…

[单机]完美国际_V155_GM工具_VM虚拟机

[端游] 完美国际单机版V155一键端PC电脑网络游戏完美世界幻海凌云家园 本教程仅限学习使用,禁止商用,一切后果与本人无关,此声明具有法律效应!!!! 教程是本人亲自搭建成功的,绝对是…

香港虚拟主机哪里可以试用?用于企业建站的

香港虚拟主机适合个人、企业建站,包括外贸企业网站、个人博客网站、中小企业官网等,那么作为新手不知道哪家香港虚拟主机好用的时候,该如何找到可以试用的香港虚拟主机呢? 香港虚拟主机也称作香港空间、香港虚拟空间,…