如何用dev-c++创建lib(静态链接库)文件

2023-11-07

虽说dev-c++适合初学者,但是它的功能还是很强大的。那如何用它制作一个lib(静态链接库)呢?

目录

第一步:制作静态链接库

第二步:链接静态链接库

方法一:使用项目

方法二:修改编译选项

第三步:使用库函数

方法一

方法二:


第一步:制作静态链接库

1.打开dev-c++,选择“新建-项目”,如下图所示。

2.选择“Static Library”,并选择编程语言(c和c++无所谓)以及给项目设置名称。

3.选择你要保存的位置。

4.在新建的文件里添加函数,我这里添加了两个:一个叫hello,用来弹出一个对话框;一个叫add,返回两个数的和。

5.保存文件(文件名可以随便选,我这里选择了main.cpp)

6.点击“编译”按钮。

 编译完成后,可能会出现以下界面:

这时,有人会觉得很奇怪:“我的程序没问题呀,为什么它报错呢?????”

仔细一看,它只不过是把使用的命令给显示了一遍,而不是报错。

7.在生成的文件中找到一个.a文件(我这里是hello.a,因为项目名是hello,你的可能不一样),这就是生成的静态链接库文件。

第二步:链接静态链接库

库做好了,但是我们编程的时候怎么用它呢?方法就是链接。在自己的代码中链接静态链接库,有两种方法,各有优劣。

方法一:使用项目

1.新建一个console application项目。(不能是源代码,必须是console application,如果你像我一样不喜欢console application,请使用方法二)

2.选择保存位置。

 3.打开“项目属性 -> 参数”。

4.点击“加入库或对象”,把刚才的库加进去。

5.点击“确定”,大功告成!

优点:

1.只有这个项目的文件才会链接该库,别的文件不会。

2.网上比较常见。

缺点:

1.只能新建console application,不能新建源代码。(说实话,我非常不喜欢console application)

因此,这种方法适合链接不太常用的库。

方法二:修改编译选项

1.将自己的库重命名,命名为“libxxx.a”,例如“libhello.a”。

2.新建一个源代码(这回不用console application了,我好开心!) 

3.打开“工具 -> 编译选项。”

4.找到“在连接器命令行加入以下命令”,在那个框里加入以下命令(如果框里已经有命令了,就在末尾加一个空格,再输入下面的命令):

-l你的库名(去掉开头的lib和结尾的.a)

 举个例子:我的库名是libhello.a(见第1步),那么我应该加上命令:

-lhello

注意,以下3种写法都是错误的:

-llibhello.a
-llibhello
-lhello.a

再比如,你的库名是libtest.a,你应该加上: 

-ltest

示例图(以我的库为例):

  

能不能在-l和库名之间加一个空格呢?当然可以!

5.还没完!找到“目录 -> 库”。

 6.把你的库的路径添加进去。怎么添加?点击右下角的“浏览”按钮,找到库的路径,点“确定”。

7.点“添加”,再点“确定”,OK!

优点:

1.可以新建源代码,而不是我讨厌的console application。。。  

缺点:

1.每次会自动链接该库,导致可执行文件体积巨大。

2.网上不常见,遇到了问题很难解决。

因此,这种方法适合经常使用的库。

第三步:使用库函数

万事俱备,只欠东风!库也造好了,链接也链接了,就差调用库函数了!怎么调用呢?还是有两种方法。

注意:如果你是在console application中链接静态链接库,则你只能在项目文件中调用库函数;如果你修改了编译选项,则每一个程序都可以调用库函数!

方法一

1.在需要调用库函数的代码里,写出库函数的函数原型。(必须写函数原型,否则会报错!)

 2.直接调用函数即可。(下图为完整代码)

 

#include <cstdio>
void hello();
int add(int a,int b);
int main(){
	printf("%d",add(1,2));
	hello();
	return 0;
}

运行效果:

优点:操作简单。

缺点:只有你自己知道函数原型,如果别人使用此函数,就不得不向你询问函数原型。

因此这种方法适合自己使用库函数。

方法二:

1.把函数原型写在一个头文件里。

 2.引入头文件,就可以使用库函数了!

优点:别人可以知道函数原型。

缺点:比较麻烦。

因此,这种方法适合共享给别人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用dev-c++创建lib(静态链接库)文件 的相关文章

  • C++ 维护子类对象的混合集合

    如果我在这里错过了一个相当基本的概念 我很抱歉 但我正在尝试弄清楚如何维护多个类类型的集合 所有类类型都派生自同一个父类 并且在检索它们时仍然可以访问它们的特定于子类的方法从集合中 作为上下文 我有一个基类 BaseClass 和许多类 例
  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • 使用可变参数包类型扩展的 C++ 函数调用者包装器

    我绑定了一些 API 并且绑定了一些函数签名 如下所示 static bool WrapperFunction JSContext cx unsigned argc JS Value vp 我尝试将对象和函数包装在 SpiderMonkey
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有

随机推荐

  • 贝叶斯推断及其互联网应用(一)

    贝叶斯推断及其互联网应用 一 投递人 itwriter 发布于 2011 08 25 14 03 评论 6 有1981人阅读 原文链接 收藏 一年前的这个时候 我正在翻译Paul Graham的 黑客与画家 那本书大部分谈的是技术哲学 但是
  • 二、水平管道中CO2气液两相的流量研究

    水平管道中CO2气液两相的流量研究 3 1 引言 在CCS系统的CO2管道运输过程中 由于传输距离较长且受到管道周围环境的影响 管道中的CO2不可避免的会发生相态的改变 产生气液两相CO2流 因此 本研究基于多传感器系统的测量方法 对水平管
  • android hwcomposer 抓取各个显示图层的raw显示数据

    amlogic 平台 void fill color void vaddr int cnt unsigned int p data p data unsigned int vaddr for int i 0x00 i lt 256 1920
  • 服务器---session理论知识

    1 session理论知识 1 1 session何时创建 1 2 session何时销毁 1 session何时创建 Session 机制 session机制是一种服务器端的机制 用来在无状态的HTTP协议下越过多个请求页面来维持状态和识
  • Mac上Pycharm中安装anaconda的pandas和numpy的方法

    1 点击PyCharm菜单栏下的Preferences 2 选择需要安装的project中的Project Interpreter选项 3 选择一个python版本 如红框1 下面会列出已经安装了的Package 这时点击红框2的anaco
  • 【Mac】Mac下SSH免密登录localhost

    1 背景 问题起因参考 mac下ssh 报错 localhost ssh connect to host localhost port 22 Connection refused 为了在MAC上搭建Hadoop standalone 需要配
  • gtx1050ti最稳定的驱动_更新PC电脑的蓝牙驱动方法

    有时候我们需要更新自己的电脑蓝牙版本使我们在特定环境下更好的使用 下面就来讲讲怎么更新蓝牙版本 一 首先我们要查看自己电脑的蓝牙版本 1 右键点击左下方的开始菜单 找到设备管理器 M 2 点开设备管理器 找到蓝牙并右键属性 并查看驱动程序
  • Vue3 中的 @Options,是做什么的?

    Vue3 中的 Options 是做什么的 Options 是个啥 为什么我的项目中会有 Options 或 Component 啥是 类语法风格的组件 Class Style Component Vue Class Component 更
  • 【Hello mysql】 mysql的复合查询 (重点)

    Mysql专栏 Mysql 本篇博客简介 介绍mysql的复合查询 mysql的复合查询 基本查询回顾 查询工资高于500或岗位为MANAGER的雇员 同时还要满足他们的姓名首字母为大写的J 按照部门号升序而雇员的工资降序排序 使用年薪进行
  • MFC之底层窗口实现01(包括windows窗口消息机制)

    1 MFC需要了解的相关概念 1 SDK和API SDK 软件开发工具包 Software Development Kit 一般都是一些被软件工程师用于为特定的软件包 软件框架 硬件平台 操作系统等建立应用软件的开发工具的集合 也称第三方工
  • 【嵌入式学习-C语言篇】 while & for 的使用

    while for 的使用 while for 的常用场景 自动售货机 判断是否存在待处理订单 智能音箱 打印当前搜索到的wifi热点信息 自动售货机 计算当前所有订单的金额 有收入有退款 代码 include
  • Android解析含有键值是汉字的json串

    Android解析含有键值是汉字的json串 今天在接入百度orc识别身份证的功能时 请求成功后 百度返回的json中发现有的键值是中文 我之前没有遇到过这种情况 依然用在之前项目封装的fastjson正常解析json串 结果解析失败 刚开
  • 性能测试二八原则,响应时间2/5/8原则

    性能测试二八原则 响应时间2 5 8原则 所谓响应时间的 2 5 8原则 简单说 就是 当用户能够在2秒以内得到响应时 会感觉系统的响应很快 当用户在2 5秒之间得到响应时 会感觉系统的响应速度还可以 当用户在5 8秒以内得到响应时 会感觉
  • Java视频学习笔记-19-设计模式

    面向对象思想设计原则 单一职责原则 即高内聚低耦合 每个类应该只有一个职责 对外只能提供一种功能 而引起类变化的原因应该只有一个 功能细化 在设计模式中 所有的设计模式都遵循这一原则 开闭原则 对类的改动是通过增加代码进行的 而不是修改现有
  • zlib库使用简单讲解

    1 zlib库简介 zlib 是通用的压缩库 提供了一套 in memory 压缩和解压函数 并能检测解压出来的数据的完整性 integrity zlib 也支持读写 gzip gz 格式的文件 源码网址 http www gzip org
  • C# 字符串

    文章目录 C 字符串操作 1 获取长度 2 查找字符 3 字符串替换 4 字符串截取 5 字符串插入 C 类型转换 1 隐式类型转换 2 显式类型转换 C Convert方法和Parse 方法 1 Parse 2 Convert C 装箱和
  • 【机器学习-西瓜书】第5章 神经网络

    5 1 神经元模型 定义 神经网络是由具有适应性的简单单元组成的 广泛并行互连的网络 其组织能够模拟神武神经系统对真实世界物体所做出的交互反应 这里的简单单元指 神经元neuron 在神经网络中 每个神经元与其他神经元相连 当超过一个 阈值
  • Bash脚本自学 - 变量和位置自变量

    变量 在hellothere sh文件里 bin bash FIRST NAME Herbert LAST NAME Lindemans echo Hello FIRST NAME LAST NAME 在指令行输入 chmod u x he
  • [LeetCode] Binary Tree Level Order Traversal 二叉树层次遍历(DFS

    目录 1 Binary Tree Level Order Traversal 二叉树层次遍历 BFS 2 Binary Tree Level Order Traversal II 二叉树层次遍历从低往高输出 BFS 3 Maximum De
  • 如何用dev-c++创建lib(静态链接库)文件

    虽说dev c 适合初学者 但是它的功能还是很强大的 那如何用它制作一个lib 静态链接库 呢 目录 第一步 制作静态链接库 第二步 链接静态链接库 方法一 使用项目 方法二 修改编译选项 第三步 使用库函数 方法一 方法二 第一步 制作静