gcc制作静态库和动态库总结

【gcc】 gcc编译动态库(共享库)、静态库|链接静态库、动态库 目录 即看即用 一、GCC 简介 GCC编译流程 GCC编译选项 二、GCC生成动态库和静态库 三、生成动态库和静态库实例 四、静态库和动态库的使用和配置 静态库的使用 共享库的使用 不到你指定链接的so错误 编译链接静态库、动态库 链接动态库 即看即用 多个源文件/目标生成动态库 a. gcc -fPIC -shared ... 阅读详情

原文:http://blog.youkuaiyun.com/begosu/article/details/52678569


Linux下制作静态库和动态库

目录结构:
这里写图片描述

文件内容:

//main.c
#include<stdio.h>
#include"../include/add.h"
int main()
{
    printf("%d",add(1,2));
}
//____________________________________________
//add.c
#include"../include/add.h"
int add( int a, int  b)
{
    return a+b;   
}
//______________________________________________
//add.h
int add( int a, int  b)



动态库制作(.so)

gcc -shared -fPIC -o lib/libadd.so src/add.c

或者

gcc -fPIC -c src/add.c    
gcc -shared -o libadd.so  add.o 

使用共享库

gcc src/main.c -Llib -ladd -o main                                                                                    

运行报错:

./main: error while loading shared libraries: libadd.so: cannot open shared object file: No such file or directory

解决方案总结:
1、加-Wl和rpath

 gcc src/main.c -Llib -ladd -o main -Wl,-rpath=lib 

2、修改LD_LIBRARY_PATH

export LD_LIBRARY_PATH=~/test/lib:$LD_LIBRARY_PATH

3、使用ldconfig

//把库放到标准路径
cp ~/test/lib/libadd.so /usr/lib
chmod 0775 /usr/lib/libadd.so
//更新缓存
ldconfig
gcc src/main.c -Llib -ladd -o main       

-fPIC:编译动态库必须,输出不依赖位置的代码
-shared:编译动态库必须选项
-WI:向Linker传入一些参数

静态库制作

gcc -c src/add.c -o add.o           //制作obj文件
ar -crv lib/libadd.a add.o          //制作归档文件
gcc src/main.c -Llib -ladd -o main  //加上L(指明链接目录) l(指明链接库名)

【Linux】Linux下的gcc编译以及静态库和动态库的制作以及make的使用 一、前言 系统开发人员为了提高项目开发的效率,往往使用成熟库。如何制作静态库和动态库,是软件工程师的基本技能。通过库文件,开发人员可以将自己经常使用的函数封装到库文件中,一方面提供代码的重用,另一方面避免重复劳动,提高项目开发的速度。每一位系统研发工程师,都要学会制作和灵活使用静态库和动态库。 其实就是在Linux里运行c语言,用gcc编译器编译c语言,所谓的库也就是我们之前学c/c++面向对象程序设计时 写的头文件。 二、gcc编译器 1、gcc编译器工作过程: 2、gcc编译器编译过程: 3、gcc 阅读详情

相关推荐

从0到1做AI漫剧:即梦+豆包+剪映+红果全流程实战

AI视频生成正在重塑内容创作的生产方式,它让原本高门槛的影视制作,变成了一条由文本、画面、剪辑与分发环节协同的流水线。理解其底层原理,在于将大模型的语义理解、图像生成与视频合成能力,与工程化的流程管理相结合,从而实现从创意到成片的自动化输出。这种技术的价值,不仅体现在降低制作成本,更在于让个人创作者能够独立完成高质量短剧,并快速迭代内容。在短剧、短视频、广告营销等场景中,利用即梦生成画面、豆包编写剧本、剪映完成剪辑、红果进行分发的组合,已成为一种被广泛验证的实践路径。本文聚焦AI漫剧制作,从环境准备、分镜设

weixin_34072637的博客 380

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

gcc生成静态库.a和动态库.so一、用gcc生成静态库和动态库1、 hello实例2、实例一3、实例二二、总结三、参考资料 一、用gcc生成静态库和动态库 1、 hello实例 2、实例一 3、实例二 二、总结 三、参考资料 ...

阿布巴的博客 2980

汽车TSN时间敏感网络测试技术与探索系列讲座4 -TSN802.1AS同步要求及验证方法

TSN网络各设备类型同步性能要求是什么?各类设备的测试组网及测试内容。也将通过演示来展示相关测试结果,及如何解决上述的测试关注点。

weixin_43903833的博客 761

GCC编译步骤、动态库和静态库的创建和使用、ELF库简介及查看方法

通过上面的操作,发现一个高级语言程序,通过预处理、编译、汇编之后生成了main.o目标文件的ELF格式文件,这到底是一种怎样的文件格式呢?ELF是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件的文件格式。一个ELF文件一般由四个部分组成:ELF header里面存放着很多整体分布的信息,如文件类型、版本信息等;描述的是一个段在文件中的位置、大小以及它被放进 内存后所在的位置和大小;Section将文件分成一个个节区,每个节区都有其对应的功能,如.text 用于存放机器码;

sjsnsnsnsi的博客 5661

SPSS_Process—简单&平行&链式中介模型

本篇文章介绍采用SPSS的插件Process对简单中介、链式中介、平行中介模型进行检验的操作方法及结果解读。

m0_54401011的博客 4万+

Alphafold2/multimer Conda环境配置与GPU加速优化指南

本文详细介绍了如何在本地服务器或工作站上,通过Conda环境配置并优化GPU加速来部署Alphafold2及其多聚体版本Alphafold2-multimer。内容涵盖从硬件准备、依赖安装、数据库部署到实战预测与常见报错处理的全流程,重点解决了本地安装过程中的依赖冲突与GPU调用失败等关键问题,帮助研究人员高效运行这一蛋白质结构预测工具。

neovim7hacker的博客 470

【c语言】gcc编译动态库静态库和使用说明

c语言gcc编译动态库静态库和使用说明

hutaotaotao的博客 2940

【音视频处理】MP4、FLV、HLS适用范围,在线视频播放哪个更好

本期我们讨论在线点播的视频格式,对比这些视频格式的优劣以及原因 1、封装格式的作用 2、MP4 3、FLV 4、HLS

池鱼 - YiiGaa 2万+

Linux中gcc的编译、静态库和动态库的制作

Linux中gcc的编译、静态库、动态库文章目录:1 gcc的编译过程1.1 gcc的编译过程1.2 gcc的常用参数2 gcc 静态库的制作2.1 静态库的制作流程2.2 静态库的优缺点3 gcc 动态库 / 共享库 的制作3.1 动态库 / 共享库的制作流程3.2 动态库查找不到解决方法3.3 动态库的优缺点 gcc是文本编译器,就是编译代码的工具,下面介绍gcc编译C语言(.c文件)的流程...

求真、务实 6769

Mac版UltraEdit 18.00.0.19破解教程:终端一行命令搞定(附版本适配指南)

本文为Mac用户提供了UltraEdit的合法替代方案与授权指南,强调破解软件的法律风险和安全隐忧。推荐使用VS Code、Sublime Text等开源或商业编辑器,结合终端工具如Vim/Neovim,实现高效文本编辑。同时详细介绍了UltraEdit的官方授权选项,帮助开发者在遵守软件许可的前提下提升工作效率。

k9l0m1的博客 354

第25节:cesium 地形开挖综合实例-地下管网(含源码+视频)

地图开挖综合示例,包括底图切换,绘制开挖区域,移除开挖区域,影藏地图等等。

qq_29384639的博客 1781

C语言 Windows下使用gcc制作静态库与动态库

前言 将函数封装成库不仅有利于代码的复用, 还可以在不公开源码的情况下给他人使用函数的功能。本文记录了Windows下使用gcc制作静态库的过程。 一、测试代码编写 测试函数为一个加法函数,它将被制作成静态库,并被函数main()调用。各个文件如下所示,它们被放在同一个目录下。 add.h int add(int a, int b); add.c #include "add.h" int add(int a, int b) { return a + b; } main.c #in.

TIME_LEAF的博客 6229

YOLOv5改进 | 多尺度特征提取 | 结合多样分支块及融合的高级设计(CVPR2021)

YOLOv5改进 | 多尺度特征提取 | 结合多样分支块及融合的高级设计(CVPR2021)

qq_44224801的博客 2068

GCC编译步骤及静态库动态库制作

GCC GCC编译的4个步骤 -D:编译的之后添加宏定义 //测试gcc -D选项,编译的时候指定宏定义. #include<stdio.h> int main(int argc, char const *argv[]) { #ifdef DEBUG printf("hello\n"); #else printf("world\n"); #endif #ifdef ...

hhhhhyyyyy8的博客 2943

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【Linux操作系统】GCC编译与静态库、动态库制作详解

本文详细介绍了GCC编译过程以及如何制作静态库和动态库。通过预处理、编译、汇编和链接四个阶段,我们可以将源代码转换成可执行文件或者库文件。静态库将多个目标文件打包成一个文件,程序在编译时会将静态库的代码复制到可执行文件中;而动态库是在程序运行时被加载的库文件,它可以被多个程序共享使用,减少了内存的占用。

Goforyouqp的博客 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

编译器gcc 静态库,动态库的制作

文章目录gcc概述什么叫交叉编译编译选项编译优化使用静态库和动态库的区别(生成可执行文件的区别)制作静态库:静态库使用:动态库的创建: gcc概述 GUN计划提供编译器(unix cc编译器)编译工具链g++ ld ldfd 交叉编译工具链 什么叫交叉编译 A\源文件到可执行文件经历哪几个步骤 (预处理 编译 汇编 链接) B\预处理的任务:头文件展开#include,宏替换#define,条件编译(#开头的代码) C\编译的任务:检查语法,生成汇编文件.s D\汇编阶段:编译汇编文件,生成目标文件.

jianjiange1的博客 1107

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

GCC编译器和静态库动态库制作使用

C++学习day03 一、GCC编译器 1.GCC编译器的介绍 ◼ GCC 原名为 GNU C语言编译器(GNU C Compiler) ◼ GCC(GNU Compiler Collection,GNU编译器套件)是由 GNU 开发的编程语言 译器。GNU 编译器套件包括 C、C++、Objective-C、Java、Ada 和 Go 语言前 端,也包括了这些语言的库(如 libstdc++,libgcj等) ◼ GCC 不仅支持 C 的许多“方言”,也可以区别不同的 C 语言标准;可以使用命令行 选项来

m0_45698131的博客 243

(五)gcc编译器 2.静态库和动态库的制作

内容摘要:       本节主要介绍静态库和动态库的制作和使用,以及比较静态库和动态库的优缺点 文章目录一、静态库的制作与使用制作步骤:静态库的使用:静态库的优缺点二、动态库的制作与使用制作步骤:动态库的使用:动态库的优缺点三、指定共享库的位置 一、静态库的制作与使用       静态库在linux中是以.a结尾的文件。静态库是在编译过程中链接时生成可执行文件时使用的。静态库的命名规则

Engineering Lion的博客 265

gcc工具制作静态库和动态库

学习目标: 掌握gcc编译器编译过程 掌握静态库和动态库的制作 学习内容: gcc编译器编译过程 库文件 静态库和动态库 静态库和动态库的制作 学习时间: 周四 学习产出: 优快云 技术博客 31篇 gcc编译器编译过程 预处理:处理所有以#开头的代码,包括头文件、宏定义、条件编译 gcc -E hello.c -o hello.i #include 头文件展开 #define 宏定义替换 #if 条件编译 如果不满足 代码丢掉 编译:语法检查以及将C语言变成汇编语言 gcc -S hello.i -o

passwordee的博客 411

linux系统编程(三)gcc常用技巧与静态库与动态库制作

ldconfig就是实现这一功能的工具,其缺省读取/etc/ld.so.conf文件,对所有共享库按照一定规范建立符号连接,然后将信息写入/etc/ld.so.cache。从理论上讲,应用程序使用了静态库,要比使用动态加载库速度快1-5%,但实际上可能并非如此。共享库的创建比较简单,基本有两步。建议库开发人员创建共享库,比较明显的优势在于库是独立的,便于维护和更新;使用gcc的-l选项来指定静态库,使用-L参数来指定库文件的搜索路径。然后更新.a文件的索引,使之包含新加入的.o文件的内容(ar的参数s)。.

da.的博客 581

Linux操作 gcc编译过程 制作静态库、动态库

gcc编译过程 制作静态库、动态库

fruit的博客 452

gcc(二)制作静态库和动态库

一 库的意义 场景: 公司之间的'合作' 需求: '智能路由器'-->手机连接到路由器,自动知道你手机开了'哪些软件?' 核心技术: 如何'监测'? 外包: 'A公司'解决不了,外包给'B(网络开发)'公司来做 一段时间: B公司帮你实现了,不会给你源代码'(机密)',给了你一个'.so'库文件,并提供了相关的'API接口'供A公司来调用 二 制作静态库 ① 原材料准备 说明: '新建'一个'build'目录是为了避免'Build Tree'和'Source Tr...

wzj_110的博客 306

GCC 编译器使用详解:从编译过程到动态库静态库制作

本文详细介绍了GCC编译器的使用方法和编译过程。主要内容包括: C程序编译的基本流程:预处理→编译→汇编→链接,以及各阶段对应的GCC选项(-E、-S、-c) 头文件和库文件的搜索路径设置方法: 使用-I指定头文件目录 使用-L指定库文件目录 使用-l链接特定库 动态库和静态库的制作与使用: 通过-shared选项生成动态库 通过-static选项进行静态链接 常用编译选项速查表,包括各阶段控制选项、路径设置选项等 多文件编译的组织方式,包括头文件与源文件的配合 文章通过简单示例展示了从单个C文件到完整可执

2502_92009732的博客 532
上一篇: printf输出指定长度字符串
下一篇: 一个简单的DH密钥协商算法的实现
ly0303521
博客等级 码龄17年 135粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值