在Ubuntu下生成动态库与静态库

关于在Ubuntu中静态库与动态库的生成与使用 文章目录静态库的生成及使用一、生成文件二、生成静态库文件三、生成可执行文件动态库的生成及使用一、生成目标文件二、使用.so库文件,创建可执行程序 静态库的生成及使用 一、生成文件 1.为了便于观察,我们首先可以建立一个text2文件夹来保存文件。 mkdir text2 2.如果要用之前写过的文件,可以将文件移入到指定文件夹,但要注意,移动时需先进入到被移动文件的目录下。 sudo mv sub1.c sub.h text2 可以查看一下,发现以移入。 ls text2 反馈结果为:sub1.c 阅读详情

前期需要准备的工作(已经在服务器上完成)

  • 安装opencv,以及其他附加项 * TEST代码显示的时候需要*
    可以参考http://blog.youkuaiyun.com/kuaile123/article/details/20870731
  • 安装cmake、gcc、g++……
  • 由于操作系统的不同,主要是包含头文件的方式有所不同,所以对修改后的代码打包在附件lib中,将附件中的lib文件复制到CentOS , 我将其复制在Desktop目录下

利用CMakeLists.txt生成动态库(.so)和静态库(.a)

编写库文件的CMakeLists.txt
#同时生成动态库和静态库
cmake_minimum_required(VERSION 2.8)
project(RefineOffaxis)
aux_source_directory(. DIR_SRCS)
include_directories(~/Desktop/eigen)
ADD_LIBRARY(RefineOffaxis SHARED ${DIR_SRCS})
SET_TARGET_PROPERTIES(RefineOffaxis PROPERTIES VERSION 1.0 SOVERSION 1)
ADD_LIBRARY(RefineOffaxis_s STATIC ${DIR_SRCS})
SET_TARGET_PROPERTIES(RefineOffaxis_s PROPERTIES OUTPUT_NAME "RefineOffaxis")
INSTALL(TARGETS RefineOffaxis RefineOffaxis_s
          LIBRARY DESTINATION lib 
          ARCHIVE DESTINATION lib)
INSTALL(FILES refineOffaxis.h DESTINATION include/RefineOffaxis)
1 对上面CMakeLists.txt的解析

cmake_minimum_required(VERSION 2.8) 指定cmake需要的最小版本

project(RefineOffaxis) 指定项目名

aux_source_directory(. DIR_SRCS) aux_source_directory(dir variable) 获取指定目录下的所有文件,保存到variable中,包括 .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx文件,上面示例是将当前目录中的源文件名称赋值给变量 DIR_SRCS

include_directories(~/Desktop/eigen) include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 …) 用来设定目录,这些设定的目录将被编译器用来查找include文件 ,由于我们生成动态库和静态库的过程中需要使用eigen,而我又将eigen放在Desktop目录下,所以包含的形式如上所示,为了美观,可以将eigen放在usr/local/include/目录下

ADD_LIBRARY(RefineOffaxis SHARED ${DIR_SRCS})add_library( [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 source2 … sourceN)添加一个名为的库文件,指定SHARED,STATIC.如果指定为SHARED则生成动态库(.so),如果指定为STATIC,则生成静态库(.lib),在上例中,我们先生成动态库,所以参数选为 SHARED

SET_TARGET_PROPERTIES(RefineOffaxis PROPERTIES VERSION 1.0 SOVERSION 1) 为动态库添加版本号,VERSION指代动态库版本,SOVERSION指代API版本

ADD_LIBRARY(RefineOffaxis_s STATIC ${DIR_SRCS})上面介绍过ADD_LIBRARY命令了,这个是用来生成STATIC静态库,同时,要求生成静态库的名字为RefineOffaxis_s和动态库区分

SET_TARGET_PROPERTIES(RefineOffaxis_s PROPERTIES OUTPUT_NAME “RefineOffaxis”)这句话的意思相当于我们给静态库RefineOffaxis_s起了个别名RefineOffaxis,目的是为了生成库的美观

INSTALL(TARGETS RefineOffaxis RefineOffaxis_s LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
INSTALL(FILES refineOffaxis.h DESTINATION include/RefineOffaxis)
上面的两条命令的意思都是添加安装功能,方便将动态库 静态库 头文件一块安装到需要的目录

2 CMakeLists.txt的使用

在CMakeLists.txt 所在目录下 mkdir build 采用外部构建的模式

[haiqing@localhost build] cdbuild[haiqing@localhostbuild] cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
[haiqing@localhost build] make[haiqing@localhostbuild] sudo make install

最终的结果是 so库和a库 安装在 /usr/local/lib目录下,RefineOffaxis.h安装在/usr/local/include/RefineOffaxis

测试生成的动态库与静态库

1 目录建立

将附件中的src文件夹复制到和附件lib同目录下
src中有两个文件,一个是CMakeLists.txt,一个是main.cpp

2 解析CMakeList.txt
cmake_minimum_required(VERSION 2.8) 
PROJECT(RefineOffaxis)
FIND_PACKAGE(OpenCV REQUIRED)
ADD_EXECUTABLE(RefineOffaxis main.cpp)
target_link_libraries(RefineOffaxis ${OpenCV_LIBS} )
#TARGET_LINK_LIBRARIES(RefineOffaxis RefineOffaxis)
TARGET_LINK_LIBRARIES(RefineOffaxis libRefineOffaxis.so)
#TARGET_LINK_LIBRARIES(RefineOffaxis libRefineOffaxis.a)
INCLUDE_DIRECTORIES(/usr/include/RefineOffaxis)
INCLUDE_DIRECTORIES(/usr/locla/include)

主要关注第6.7.8行,如果注释掉第7.8行,单单使用第6行时,通过lld命令可以知道该方法调用的动态库,效果和注释掉6.8两行的效果一样,如果想使用静态库,则注释掉6.7行就可以了。
源码下载地址:https://github.com/ruyiweicas/MAKE_SO_A_UBUNTU-CentOS

在Ubuntu上用gcc生成静态库和动态库 阅读详情

相关推荐

Ubuntu24.04 下源码编译安装最全的ffmpeg,生成动态库和静态库

在 Ubuntu 24.04 上编译和安装 FFmpeg 并生成完整的动态库和静态库,确实是一个复杂而详尽的过程,涉及很多不同的步骤与配置选项。以下内容将详细讲解如何在 Ubuntu 上进行 FFmpeg 编译安装,生成所需的动态库和静态库。

woter2019的博客 3455

Ubuntu环境下理解和使用gcc生成静态库和动态库

步骤一:编译子程序hello.h hello.c main.c 首先创建一个文件夹zy1(作业1) cd进入作业1后使用vim编写源代码 编写三个代码内容如下 编写代码完成后点击键盘的esc键退出编辑,再按下 shift + ;键终端左下角提示输入后输入 wq后按空格键输入文件名即可回车退出编辑 创建完成输入ls查看文件 步骤二:将hello.c编译成.o文件 输入命令gcc -c hello.c并通过命令ls查看文件是否生成

qq_52328895的博客 842

gcc生成静态库.a和动态库.so以及Ubuntu下OpenCV使用

要求: 一. 学习并掌握可执行程序的编译、组装过程。学习任务如下: 1)阅读、理解和学习材料“用gcc生成静态库和动态库.pdf”和“静态库.a与.so库文件的生成与使用.pdf”,请在Linux系统(Ubuntu)下如实仿做一遍。 2)在第一次作业的程序代码基础进行改编,除了x2x函数之外,再扩展写一个x2y函数(功能自定),main函数代码将调用x2x和x2y ;将这3个函数分别写成单独的3个 .c文件,并用gcc分别编译为3个.o 目标文件;将x2x、x2y目标文件用 ar工具生成1个 ..

cxy1999120的博客 449

Ubuntu--(5)Linux下C++编译生成自定义静态库/动态库

编译生成静态库:1.编写CPP文件test.h#include <iostream>using namespace std;class ADD_SUB{ public: int add(int a, int b){ cout << "a + b = " << a + b << endl; return a + b; } int sub(int a

kღïξs√√ 2908

点云欧式聚类快速了解

一种基于欧氏距离度量的聚类算法基于KD-Tree的近邻查询算法是加速欧式聚类算法的重要预处理方法KD-Tree是由二分搜索树演变而来的用于大规模高维度数据查找场景当中的索引结构,主要用于最近邻查找和近似最近邻查找。将整个空间划分为二叉树的形式,方便有效找到最近邻点云处理算法库PCL,是比较重要的,在后续会继续学习,然后发出更优质的文章。

xiaobaiwsc的博客 1721

新手如何学习车载底层嵌入式软件开发(AutoSar)

汽车嵌入式开发

ACarSoft的博客 4219

ubuntu中C++工程打包所有依赖的so文件

magic_ll的博客 3724

ANSYS ICEM CFD 2023R2 结构化网格实战:翼型绕流 10 步生成高质量六面体网格

在计算流体力学(CFD)分析中,网格质量直接决定了仿真结果的精度和收敛性。对于翼型绕流这类典型的外部流动问题,结构化网格因其规则的节点排列和优异的边界层捕捉能力,成为高精度模拟的首选方案。通过在后缘处添加局部H型拓扑,并将过渡区增长率降至1.1,最终使网格质量指标提升40%,计算收敛速度提高2倍。这印证了结构化网格在复杂流动模拟中的不可替代性——虽然初期投入时间较多,但能显著提升计算精度和稳定性。在开始网格划分前,合理的几何准备是确保后续流程顺利的关键。对于翼型绕流,O型网格拓扑能提供最佳的边界层适应性。

weixin_30731305的博客 362

【Ubuntu】打包C++程序及导出依赖库lib

由于程序可能需要大量的参数输入,且执行时需要导入依赖环境,因此建议直接提供sh脚本供他人使用,以节省沟通成本,以下为参考示例。可自行修改脚本路径,同时修改脚本中command路径,保证需要的文件可被查询到。不同版本及不同的操作系统可能无法直接运行,Windows使用可参考。,预期程序可正常执行,建议在别人的机器上或者虚拟机上测试一下。文件夹,程序执行所需依赖库均会复制到该目录中。创建的可执行目标文件同级目录下新建。程序打包的前提至少应在。,在上一级文件夹中生成。

蝉鸣居士 2366

手把手教你用Synopsys AHB VIP搭建验证环境:从SINGLE到WRAP16的完整波形分析与避坑指南

本文详细介绍了如何使用Synopsys AHB VIP搭建验证环境,从基础配置到复杂波形调试实战。重点解析了AHB协议中各种Burst类型的地址计算机制,包括INCR和WRAP类型,并提供了实际案例和避坑指南,帮助工程师快速掌握验证技巧。

weixin_42552716的博客 414

基于Multisim设计电子密码锁

一、设计任务与要求:(可软件仿真实现)1)基本要求:设计一个数字密码锁,要求只有按正确的顺序,输入正确的密码,方能输出开锁信号,实现开锁。设置三个正确的密码键和若干个伪键,任何伪键按下后,密码锁都无法打开。每次只能接受四次按键信号,而且第四个键只能是“确定”或者“重输键”,其他无效。能显示已输入键的个数2)扩展要求:第一次密码输错后,可以输入第二次,但是连续三次输错,密码将被锁,必须按复位键才能解锁。

ablinger的博客 4415

Ubuntu18.04系统下,gcc生成静态库、动态库的过程与使用方法及实例演训

本文 主要是介绍Ubuntu18.04系统下,gcc生成静态库、动态库的过程与使用方法及实例演训

qq_58759694的博客 893

焊缝缺陷智能检测:基于 YOLO 的工业质检系统实战

从焊缝缺陷数据集的构建到模型训练,从桌面检测界面到缺陷统计输出,本文覆盖了一套工业焊缝质检系统的完整路线。这个场景的核心难点在数据层面——气孔和裂纹这类小目标的标注质量直接决定了模型的最终表现。建议先在开源数据集上跑通全链路,确认 mAP 达到可接受的水平后,再通过补充特定类型的小目标数据和提升输入分辨率来做精度优化。工业场景中,漏检一个气孔的成本和误报一个假阳性的成本不一样——根据对两类成本的承受力,调整置信度阈值来找到业务上的最佳平衡点。

m0_71589036的博客 201

ubuntu makefile 静态库的生成与调用,动态库的生成与调用

ubuntu makefile 静态库的生成与调用,动态库的生成与调用 准备工作 首先建立一个文件夹用以存放我们的文件 命令行下输入以下命令建立文件夹 mkdir Test cd Test 1.静态库的生成 新建一个文件夹,static用来存放静态库的数据,在static下新建include和src文件夹,在include文件夹下建立头文件static.h 内容如下: //st...

CaptainHailong的博客 1892

BAT007:批量为当前目录下的文件夹添加前缀或后缀

摘要:编写批处理程序,实现批量为当前目录下的文件夹添加前缀或后缀。

qq_31762031的博客 4052

开篇词:学习系统分析师的好处?核心考点有哪些?

系统分析师备考指南 系统分析师是IT行业的高级专业人才,具备系统分析与设计能力,能指导开发团队工作。学习系统分析师不仅能获得职业晋升的"黄金跳板",还能全面提升技术架构思维和业务理解能力。 核心价值: 职业发展:晋升管理岗位的硬性要求,突破职业天花板 能力提升:构建T型知识结构,培养架构思维和软技能 市场竞争力:成为"业务+技术"桥梁,获得国家级专业认证 考试内容: 计算机基础知识(硬件、操作系统、网络等) 系统分析专业知识(软件工程、架构设计等) 进阶知识(企业信息

数据知道的博客 5938

Ubuntu环境下gcc生成静态库,动态库实例

Ubuntu环境下生成静态库和动态库

m0_58406663的博客 312

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Ubuntu下用gcc生成静态库和动态库以及对应应用

Ubuntu下用gcc生成静态库和动态库以及对应应用

zhoushuaiyxlmwan的博客 562

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

在Ubuntu下用gcc生成.a静态库和.so动态库

文章目录一、静态库和动态库1.库的含义2.静态库(.a)3.动态库(.so)4.静态库和动态库的区别二、用.gcc生成静态库和动态库1.准备工作(1)2.生成静态库(.a)3.生成动态库(.so) 一、静态库和动态库 1.库的含义 库就是已经写好的,成熟的,可以直接使用的代码,通常情况下,将已经写好的一些公用函数制作成函数库,提供给使用者和其他程序反复使用。 从本质上来说,库是一种可执行代码的二进制形式,可被操作系统载入内存执行。 库分为静态库和动态库两种。 2.静态库(.a) 静态库:在链接步骤中,

m0_53302175的博客 799

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Ubuntu16.04系统下静态库.a和动态库.so文件的生成及使用

目录 一、库 1) 概念 2) 规则 二、编译时链接静态库文件 1) 源程序 2)编译静态库文件libx2.a 3)链接为可执行文件main 三、编译时链接动态库文件 1)编译动态库文件libx2.so 2)链接为可执行文件 3)链接静态库与动态库生成可执行文件的对比 四、总结 五、 参考内容 一、库 1)概念 本质...

boomboomy的博客 1301

ubuntu下用gcc生成与使用静态库和动态库以及与其他编译器的对比和函数库的应用

ubuntu下用gcc生成与使用静态库和动态库以及与其他编译器的对比静态库与动态库准备工作用gcc生成与使用静态库用gcc生成.a静态库文件静态库的链接用gcc生成与使用动态库用gcc生成.so动态库态库文件动态库的链接静态库与动态库生成可执行文件对比编译器gcc与nasm编译的可执行文件大小的对比借助第三方库函数完成代码设计基于光标库(curses)的简单函数体验远古时代的 BBS (一个用键盘光标控制的终端程序)gcc编译生成终端游戏如何链接curses库 静态库与动态库 准备工作 用gcc生成与使用静

LIKE的博客 1215

Ubuntu下用gcc生成.a静态库和.so动态库

通过Ubuntu的学习,用gcc生成.a的静态库和.so的动态库。

qq_56355200的博客 553

【ubuntu】用 gcc 生成 .a 静态库和 .so 动态库并使用

用 gcc 生成 .a 静态库和 .so 动态库

qq_52201641的博客 759

Ubuntu系统中生成静态库和动态库

Ubuntu中静态库和动态库

qq_53088119的博客 468

Ubuntu下makefile及gcc生成静态库动态库的简单使用举例

环境:Ubuntu-13.10 32位(虚拟机)、gcc4.8.1 首先创建一个test_makefile_gcc文件夹,此test_makefile_gcc文件夹下包括:src文件夹用于存放源文件; include文件夹用于存放头文件;bin文件夹用于存放生成的动态库.so文件;lib文件夹用于存放生成的静态库.a文件;project_makefile文件夹存放此工程的ma...

网络资源是无限的 1万+

Ubuntu下gcc的静态库与动态库的生成与使用

Ubuntu下gcc的静态库与动态库的生成与使用

qq_55894922的博客 1731
上一篇: 在window平台下生成动态库与静态库
下一篇: Tensorflow 训练自己的数据集(二)(TFRecord)
ruyiweicas
博客等级 码龄12年 192粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值