(GCC) 库的操作

文章目录

  • 预备
  • 静态库
    • 生成
    • 链接
    • 环境区别
  • 动态库
    • 生成
    • 链接
    • 环境区别
  • END
    • 参考
    • ar指令

预备

准备两个文件,以最简单的形式进行展示。

add.c

int add(int x, int y) {return x + y;
}

main.c

为了方便直接在头文件中声明函数

#include <stdio.h>extern int add(int, int);int main() {int x = 1;int y = 2;printf("%d + %d = %d\n", x, y, add(x, y));
}

静态库

生成

生成object文件

gcc -c add.c

生成库

采用ar指令进行生成静态库,其中三个参数的含义为:

ar的参数
参数c创建一个库,不管库是否存在,都将创建。
参数s创建一个库,不管库是否存在,都将创建。
参数r在库中插入模块(替换)。默认新的成员添加在库的结尾处,如果模块名已经在库中存在,则替换同名的模块。
ar rcs libadd.a add.o

img

链接

链接操作静动态库一致

  • -L 库的路径
  • -l 库的名称,去掉前后缀
  • 指定参数间的空格可有可无
gcc main.c -L . -l add

环境区别

经过测试,windows下为libxxx.a也可以

环境常用命名
Linuxlibxxx.a
Windowslibxxx.lib

动态库

生成

生成object文件

需要添加-fpic参数

gcc -c -fpic add.c

生成库

生成一个动态库,有可执行权限

不指定-o的话默认是a.exe/a.out

gcc -shared add.o -o libadd.dll

img

链接

链接操作静动态库一致

  • -L 库的路径
  • -l 库的名称,去掉前后缀
  • 指定参数间的空格可有可无
gcc main.c -L . -l add

环境区别

环境常用命名
Linuxlibxxx.so
Windowslibxxx.dll

END

参考

Linux 静态库和动态库 | 爱编程的大丙 (subingwen.cn)

侵删

ar指令

Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...ar -M [<mri-script]commands:d            - delete file(s) from the archivem[ab]        - move file(s) in the archivep            - print file(s) found in the archiveq[f]         - quick append file(s) to the archiver[ab][f][u]  - replace existing or insert new file(s) into the archives            - act as ranlibt[O][v]      - display contents of the archivex[o]         - extract file(s) from the archivecommand specific modifiers:[a]          - put file(s) after [member-name][b]          - put file(s) before [member-name] (same as [i])[D]          - use zero for timestamps and uids/gids (default)[U]          - use actual timestamps and uids/gids[N]          - use instance [count] of name[f]          - truncate inserted file names[P]          - use full path names when matching[o]          - preserve original dates[O]          - display offsets of files in the archive[u]          - only replace files that are newer than current archive contentsgeneric modifiers:[c]          - do not warn if the library had to be created[s]          - create an archive index (cf. ranlib)[l <text> ]  - specify the dependencies of this library[S]          - do not build a symbol table[T]          - deprecated, use --thin instead[v]          - be verbose[V]          - display the version number@<file>      - read options from <file>--target=BFDNAME - specify the target object format as BFDNAME--output=DIRNAME - specify the output directory for extraction operations--record-libdeps=<text> - specify the dependencies of this library--thin       - make a thin archiveoptional:--plugin <p> - load the specified pluginemulation options: No emulation specific options
ar: supported targets: elf64-x86-64 elf32-i386 elf32-iamcu elf32-x86-64 pei-i386 pe-x86-64 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big pe-bigobj-x86-64 pe-i386 srec symbolsrec verilog tekhex binary ihex plugin
Report bugs to <https://sourceware.org/bugzilla/>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/300276.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于flask和echarts的新冠疫情实时监控系统源码+数据库,后端基于python的flask框架,前端主要是echarts

介绍 基于flask和echarts的新冠疫情实时监控系统 软件架构 后端基于python的flask框架&#xff0c;前端主要是echarts 安装教程 下载到本地&#xff0c;在python相应环境下运行app.py,flask项目部署请自行完成 使用说明 flaskProject文件夹中 app.py是flask项目主运行文…

LabVIEW 通信应用程序框架概述

概述 人和机器对可靠、无处不在且价格实惠的无线数据连接的不断需求给无线行业带来了巨大的压力。业界一致认为&#xff0c;下一代无线网络 (5G) 需要在 2020 年之前将容量提高一千倍&#xff0c;而成本不会相应增加。为了应对这一技术挑战&#xff0c;无线研究人员需要跳出框…

如何实现https密钥对登录方式

先安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo systemctl start docker.service systemctl enable docker.service yum install -y docker…

RPC(6):RMI实现RPC

1RMI简介 RMI(Remote Method Invocation) 远程方法调用。 RMI是从JDK1.2推出的功能&#xff0c;它可以实现在一个Java应用中可以像调用本地方法一样调用另一个服务器中Java应用&#xff08;JVM&#xff09;中的内容。 RMI 是Java语言的远程调用&#xff0c;无法实现跨语言。…

uniapp创建/运行/发布项目

1、产生背景----跨平台应用框架 在移动端各大App盛行的时代&#xff0c;App之间的竞争也更加激烈&#xff0c;他们执着于让一个应用可以做多个事情 所以就应运而生了小程序&#xff0c;微信小程序、支付宝小程序、抖音小程序等等基于App本身的内嵌类程序。 但是各大App他不可…

Java@RequestParam注解和@RequestBody注解接收参数

目录 Java后端接收数据 第一章、后端不写任何注解情况下接收参数1.1&#xff09;后端不写注解postman发出get请求1.2&#xff09;后端不写注解postman发出post请求 第二章、后端写RequestParam注解接收参数2.1&#xff09;postman发出post请求2.2&#xff09;postman发出get请求…

快排可视化

文章目录 1. 结果1.1 结果图1.2 动画图 2. 代码2.1 快排代码2.2 绘图代码 1. 结果 红色为被选中的pt 1.1 结果图 1.2 动画图 1个pt排好序后就把该pt标红 2. 代码 2.1 快排代码 private Integer selPt(List<Integer> list, int left, int right) {if (left > rig…

iview表格固定列横向滚动条无法拖动问题

文章目录 问题解决办法 问题 在使用iview的表格组件时&#xff0c;遇到了设置固定列表格后滚动条无法拖动的问题&#xff0c;当对表格列进行固定后&#xff0c;底部的横向滚动条就无法拖动了&#xff0c;主要的问题就是固定区域盖住了横向滚动条。 解决办法 在组件内直接加下…

【Gitlab】CICD流水线自动化部署教程

第一步&#xff0c;准备 GitLab 仓库 这个不用多说&#xff0c;得先保证你的项目已经托管在一个 GitLab 仓库中。 第二步&#xff0c;定义 .gitlab-ci.yml 文件 在你的项目根目录中创建一个 .gitlab-ci.yml 文件。这个文件将定义所有 CI/CD 的工作流程&#xff0c;包括构建、测…

虚拟机服务器中了lockbit2.0/3.0勒索病毒怎么处理,数据恢复应对步骤

网络技术的不断发展也为网络威胁带来了安全隐患&#xff0c;近期&#xff0c;对于许多大型企业来说&#xff0c;许多企业的虚拟机服务器系统遭到了lockbit2.0/3.0勒索病毒攻击&#xff0c;导致企业所有计算机系统瘫痪&#xff0c;无法正常工作&#xff0c;严重影响了企业的正常…

什么是数据分析思维

参考 一文学会如何做电商数据分析&#xff08;附运营分析指标框架&#xff09; 电子商务该如何做数据分析&#xff1f;如何数据分析入门&#xff08;从各项指标表象进入&#xff09; https://www.processon.com/outline/6589838c3129f1550cc69950 数据分析步骤 什么是数据分析…

【教程】从gitee或者github,下载单个文件或文件夹命令

1.打开git 2.初始化 git init 3.设置允许下载子目录 &#xff08;不需要修改任何&#xff0c;只要原样复制&#xff0c;需要按照个人状况修改的话我会标注&#xff09; git config core.sparseCheckout true 4. 选择要下载的单个文件夹的路径 这里单引号内部需要修改&…