Linux下创建静态、动态库

libstdc++-libc6.2-2.so.3 主要用于校园网客户端提示缺少库文件的解决办法 复制到/usr/lib下 立即下载

Linux下创建静态、动态库

源码

-----------a.cpp---------------
#include <cstdio>
int a(int i)
{
        std::printf("in a(int a) %d/n", i);
        return 0;
}

-----------b.cpp----------------
#include <iostream>
int b(char *s)
{
        std::cout<<"in int b(char *s): "<<s<<std::endl;
        return 0;
}
----------main.cpp--------------
#include <cstdio>
using namespace std;
int a(int i);
int b(char *s);
int main()
{
        a(5);
        b("ok");
        printf("in main/n");
        return 0;
}

静态库
1、编译生成a.o b.o 文件
# g++ -c a.cpp b.cpp

2、生成archive 文件libtest.a  c-创建  r-将文件加入libtest.a
#ar rc libtest.a a.o b.o

3、指定静态库libtest.a 进行编译
# g++ -o main main.cpp libtest.a

运行结果
# ./a.out
in a(int a) 5
in int b(char *s): ok
in main

对于libtest.a直接将里面的代码拷贝出来相当于静态编译

动态库
1、编译生成a.o b.o文件   -fPIC生成.o文件时用相对地址实现代码位置无关
# g++ -fPIC a.cpp b.cpp

2、生成动态库libtest.so
# g++ -shared -o libtest.so a.o b.o

3、指定动态库libtest.so进行编译
# g++ main.cpp  ./libtest.so

查看动态连接库
# ldd a.out
        ./libtest.so => ./libtest.so (0x40014000)
        libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x4002e000)
        libm.so.6 => /lib/i686/libm.so.6 (0x40071000)
        libc.so.6 => /lib/i686/libc.so.6 (0x42000000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

其他
1、动态连接库3时如果
# g++ main.cpp libtest.so
编译可通过但运行出错在默认库路径下找不到libtest.so库
# ./a.out
./a.out: error while loading shared libraries: libtest.so: cannot open shared object file: No such
file or directory
查看连接库
# ldd a.out
        libtest.so => not found
        libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x4002c000)
        libm.so.6 => /lib/i686/libm.so.6 (0x4006f000)
        libc.so.6 => /lib/i686/libc.so.6 (0x42000000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

2、方便使用可以将静态库libtest.a或者动态库libtest.so拷贝到默认库的查找路径里/lib或者/usr/lib里,
编译时直接
#g++ main.cpp -ltest
-l 自动进行库名称扩展
# ldd a.out
        libtest.so => /usr/lib/libtest.so (0x4002b000)
        libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x4002e000)
        libm.so.6 => /lib/i686/libm.so.6 (0x40071000)
        libc.so.6 => /lib/i686/libc.so.6 (0x42000000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
静态情况
# g++ main.cpp -ltest
# ldd a.out
        libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x4002b000)
        libm.so.6 => /lib/i686/libm.so.6 (0x4006f000)
        libc.so.6 => /lib/i686/libc.so.6 (0x42000000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

3、静态库中2生成archive后可能需要ranlib libtest.a 将内容的索引写入libtest.a中供ld连接时使用

4、-l选项要放在所编译文件的后面,在前面会出错
# g++ -ltest main.cpp
/tmp/ccbQK3kY.o: In function `main':
/tmp/ccbQK3kY.o(.text+0xc): undefined reference to `a(int)'
/tmp/ccbQK3kY.o(.text+0x1c): undefined reference to `b(char *)'
collect2: ld returned 1 exit status

【项目立项管理、项目整合管理】30天通过软考高项-第二天 ①项目或阶段的概述;②范围目标、范围的评估标准,证明达到完⼯标准的证据;③质量目标、项目和产品质量的评估标准、相关核实信息和实际里程碑交付日期以及偏差原因;④成本目标,包括可接受的成本区间、实际成本,产⽣任何偏差的原因等;⑤最终产品、服务或成果的确认信息的总结;⑥进度计划目标,包括成果是否实现项目预期效益:如果在项目结束时未能实现效益,则指出效益实现程度并预计未来实现情况; 阅读详情

相关推荐

智能座舱语音测试避坑指南:从唤醒率到方言识别,这些场景你测全了吗?

本文深入解析智能座舱语音测试的关键场景与避坑指南,涵盖唤醒率测试、方言识别、多音区交互等复杂场景。通过实战案例与自动化测试方案,帮助开发者全面提升语音系统的可靠性与用户体验,特别关注环境噪声干扰与方言覆盖策略。

weixin_42613501的博客 496

缺少libstdc++-libc6.2-2.so.3包的解决办法

问题:缺少libstdc++-libc6.2-2.so.3: 在gdb调试时遇到问题:提示缺少libstdc++-libc6.2-2.so.3,解决方法如下 (1)下载含有libstdc++-libc6.2-2.so.3的包compat-libstdc++-296-2.96-146.1.i686.rpm (2)将这个包复制到usr/lib 向usr下复制文件方法: cp /home/sw...

cccccrystallllll's 3250

centos7下安装gcc-10.3.0

生成多个系统版本的代码,如果你的操作系统是32位,默认就已经设置为 disable,这时gcc仅能生成32位的可执行程序;这里只开启了c,c++ 和fortran,因为支持的语言越多,就需要安装越多的相应静态与动态库,还有五花八门的依赖库,这会让管理变得困难,体积也会变得庞大。启用posix标准的线程支持,这个设置取决于宿主或目标操作系统的类型,其它可用值有:aix,dec,solaris,win32等,如果你是其它的类UNIX系统,就需要设置相应的值。指定安装路径,这里没有指定,就直接放到文件夹里就好。

lxystar2003的博客 1189

hdmi 屏幕旋转 树莓派_计算机实验室之树莓派:课程 6 屏幕01

在本系列中,你将学习在树莓派中如何使用汇编代码控制屏幕,从显示随机数据开始,接着学习显示一个固定的图像和显示文本,然后格式化数字为文本。-- Alex Chadwick欢迎来到屏幕系列课程。在本系列中,你将学习在树莓派中如何使用汇编代码控制屏幕,从显示随机数据开始,接着学习显示一个固定的图像和显示文本,然后格式化数字为文本。假设你已经完成了 OK 系列课程的学习,所以在本系列中出现的有些知识将不再...

weixin_33270920的博客 345

单细胞分析(五)——使用Harmony进行数据整合和去批次

为了保证单细胞RNA测序数据的准确性和可靠性,需要对数据进行样本去批次处理。去批次的方法包括Harmony,SeuratV3等,这些方法可以有效地消除批次效应和技术噪声,并提高单细胞RNA测序数据的质量,为后续的数据分析提供更加可靠的基础。

阅读文献,记录学习笔记 3万+

想学嵌入式但没开发板?试试这个免费的STM32虚拟仿真平台(含LVGL界面教程)

本文介绍如何利用免费的STM32虚拟仿真平台学习嵌入式开发,特别适合预算有限或零硬件基础的学习者。通过详细的LVGL界面开发教程,展示虚拟仿真在嵌入式学习中的高效性和实用性,涵盖环境搭建、代码实现到实机迁移的全流程,助力快速掌握嵌入式开发核心技能。

weixin_29266647的博客 306

关于报错error while loading shared libraries: libstdc++-libc6.2-2.so.3的解决方案;

本人在进行.bin文件的安装过程中,出现了该异常 经过网上多方搜索 有如下几种解决方案: 1.使用以下代码 yum -y install compat-libstdc++-296 2.使用以下命令 ldconfig 希望能帮到大家!!! ...

qq_33304139的博客 1612

AlphaPose复现配置教程

AlphaPose是一种准确的多人姿态估计器,这是第一个在COCO数据集上达到70+ mAP (75 mAP)和在MPII数据集上达到80+ mAP (82.1 mAP)的开源系统。为了匹配跨帧的同一人的姿态,我们还提供了一种高效的在线姿态跟踪器,称为Pose Flow。这是第一个在PoseTrack挑战数据集上达到60+ mAP (66.5 mAP)和50+ MOTA (58.3 MOTA)的开源在线姿态跟踪器。AlphaPose支持Linux和Windows操作系统!指路👉。

m0_56661101的博客 4527

jprofiler远程监控配置问题

解决:Error occurred during initialization of VM Could not find agent library on the library path or in the local directory: jprofilerti 查找资料后,发现是版本依赖的问题,查看命令如下: a、 ldd /usr/jprofiler5/bin/linux...

palwang723的专栏 582

解释多智能体强化学习(Multi-Agent Reinforcement Learning)(面试题200合集,中频、重要)

多智能体强化学习通过扩展传统强化学习框架,研究多个智能体在动态、交互环境中的策略优化问题。它既有理论上的挑战(如非平稳性和均衡求解),也有广泛的实际应用前景。数学上,它依赖马尔可夫博弈模型,核心是设计算法让智能体在合作或竞争中达到最优。

qq_38334677的博客 990

数据挖掘在人力资源分析中的实战案例

在当今竞争激烈的商业环境中,人力资源管理对于企业的成功至关重要。有效的人力资源管理能够提高员工绩效、降低员工流失率、优化人才招聘等。而数据挖掘技术为人力资源管理提供了强大的工具,通过对大量人力资源数据的分析,可以发现潜在的规律和模式,为企业的决策提供有力支持。本文的目的是通过实际案例展示数据挖掘在人力资源分析中的具体应用,涵盖员工绩效预测、人才招聘筛选、员工流失分析等多个方面。通过详细的案例分析,帮助读者理解数据挖掘技术在人力资源管理中的实际操作和应用价值。

移动开发前沿的博客 489

error while loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory

 刚装完UBUNTU 8.04,安装H3C上网认证的时候,报错:linux1x: error while loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory找了一会,终于在网上找到了libstdc++-libc6.2-2.so.3(

lornice的专栏 8254

大厂硬件笔试机试题ASIC设计方向-卷3

本文提供了30道硬件工程师机试题目,涵盖数字逻辑、模拟电路、CMOS和信号处理等核心领域。选择题和判断题均配有详细解析,重点考察Verilog编程、CMOS特性、触发器设计、采样定理等知识点。题目难度适中但覆盖面广,如Verilog中阻塞/非阻塞赋值的区别、CMOS静态功耗来源、Nyquist采样定理、通用逻辑门判断等。备考建议强调掌握逻辑门设计、Verilog时序电路编写和CMOS特性理解。这些题目反映了华为等大厂硬件机试的典型考查内容,通过系统复习可有效提升机试成绩,为后续面试奠定基础。

启芯硬件的博客 545

linux下静态库和动态库的创建

linux静态链接库与动态链接库的区别及动态库的创建 一、引言 通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file)。程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下。所以这些函数库被成为静态库(static

鱼思故渊的专栏 3802

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

在Linux中创建静态库和动态库

我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。 在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编

thinkerABC的专栏 9160

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux系统编程——超级详细讲解静态库、动态库的创建、打包和使用

在Linux环境下,我们使用gcc编译连接代码时,可以分为静态链接和动态链接。静态链接即在编译链接时,将代码所使用到的静态库文件代码全部加入到可执行文件中(拷贝实质上是将库文件的代码展开拷贝至我们的可执行程序的代码段。,这样做的缺点是可执行文件会生成的比较大,优点是此时再运行可执行文件就不需要再查找库了。静态库文件一般以.a结尾。动态库链接不会在编译时将动态库文件的代码加入到可执行文件中,而是在可执行文件运行时,去查找所需的动态库,并将其加载到相应的进程中,并且不同的进程可以共享这些动态库。

学习日记 3395

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

linux下动态库和静态库的创建

什么是库? 简单来说,就像函数一样。你自己写了一个函数,想调用就调用嘛。如果别人也想用你这个函数,但是你这个函数写的特别优秀漂亮,功能特别完善。你会给他源码嘛?所以库就是类似一个你自己写的函数,你可以给代码隐藏起来。这样别人可以用但是不能看到源码。 ————————————————————————— 在Linux里面库可以分为两种: 静态库 xxx.a 动态库 xxx.so 首先我们先来看一下静态库 静态库就是将你调用的库编译到可执行程序里面。具体我们看例子 我们先创建两个小程序: static_jaso

玫瑰花店的博客 373

Linux平台下,静态库与动态库的创建

静态函数库名字一般是:libxxx.a (xxx为库的名字)。 动态函数库名字一般是:libxxx.so (xxx为库的名字)。 *linux系统的函数库目录一般为:/lib、/usr/lib。 1.静态库的制作 ① 准备测试文件: // 源文件 add.c #include <stdio.h> #include "head.h" int add(int a, int b) { return a+b; } // 源文件 mult.c #include <st

L_S_R_的博客 2718

Linux中创建静态库和动态库

转载地址: http://blog.youkuaiyun.com/leonsc/article/details/4917816 在Linux中创建静态库和动态库 一、基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同

leo_wanta的专栏 1022

Linux 创建静态库以及动态库

静态: .lib .a 格式 动态; .so .dll 格式 生成静态库: 现有三个文件组成一个程序: 第一步: 根据 hello.c 创建 hello.o 文件 第二步:把 刚才创建的 hello.o 文件变成 .a 文件 libmyhello.a 中myhello 才是文件名称 第三步:生成可执行文件 main -L ../文件夹名 -l文件名(刚才创建的那个 .a 文件) 第四步:方法1 把libmyhello.a 复制到 /lab ...

weixin_61405364的博客 1813

Linux动态库 vs 静态库:创建步骤与优缺点对比

在Linux系统开发中,静态库和动态库是我们经常使用的两种库文件类型,使用库文件进行开发工作,可以大大提高我们的开发效率,学习动静态库的差异及使用方式是我们熟练运用它的前提。本篇文章我们将通过自己制作动静态库,来深入的学习动静态的使用、差异、原理。本篇文章我们就介绍到这里,需要补充的是,gcc在编译程序时默认链接动态库,如果想要链接静态库可以使用-static显示指定。对于动态如如何实现共享,以及如何加载到内存这点我会在下篇介绍。

2301_80774875的博客 1877

Linux静态库与动态库的创建与使用

文章目录1. 在Linux中创建静态库与动态库1.1 创建静态库与动态库前的准备工作1.2 由.o文件创建静态库1.3 由.o文件创建动态库2. 静态库与动态库的应用2.1 实例12.2 实例23. 总结4. 参考文献 1. 在Linux中创建静态库与动态库 1.1 创建静态库与动态库前的准备工作 首先创建一个目录file1,用来保存文件 用nano等文本编辑器编辑生成所需要的三个文件 程序1:hello.h #ifndef HELLO_H #define HELLO_H void hello(const

啥也不懂的博客 644

【Linux】静态库和动态库的创建与使用--示例讲解

本文将介绍动态库和静态库及其优缺点,创建与使用等,搭配示例讲解,简单易懂!

logani的博客 1789

【Linux】 —— 在Linux下创建自己动态库和静态库

我们在学习 Linux编译器gcc/g++ 时也提到了动态库和静态库,但是当时我们只是简单的介绍了一下他们的概念,以及二者的优缺点,今天我们先来简单的回顾一下什么是静态库,什么是动态库,再来学一下怎么打包一个静态库和动态库 动态库和静态库 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库 动态库(.so):程序在运行的时候才去链接动态库的代码,多...

chenxiyuehh的博客 655

linux课程学习三——静态/动态库的创建

libxxx.a,就将库编译进可执行程序中。优点:程序的运行环境中不需要外部的函数库。缺点:可执行程序大,又称共享库,libxxx.so,在将库加载到可执行程序中。优点:可执行程序小。缺点:程序的运行环境中必须提供相应的库。函数库目录:/lib /usr/lib写man.c与sub.c文件内容如下,写好后去执行man.c,会显示sub函数没有定义,所以不能生成a.out,这就要根据上面的步骤去写。

2202_75840803的博客 340

linux怎么生成动态库,怎样创建Linux静态库和动态库

怎样创建Linux静态库和动态库1. 基本概念静态库:链接时,库与编译生成的 .o 文件一起打包到可执行文件中。 linux / windows 下扩展名分别为:.a / .lib动态库:链接时,不会打包到可执行文件中, 执行时会动态的加载动态库。 linux / windows 下扩展名分别为:.so / .dll区别主要体现在:a、可维护性。合入更新。合入动态库的更新,只要替换库即可。但合入静...

weixin_42231590的博客 790
上一篇: A*算法实现
下一篇: gcc编译c语言中内嵌汇编
fifan
博客等级 码龄22年 2粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值