用Eclipse + CDT + MinGW做Windows编程第四部分:将可重用的部分做成静态库

2024-04-18 05:18

本文主要是介绍用Eclipse + CDT + MinGW做Windows编程第四部分:将可重用的部分做成静态库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

4.1 导入示例项目

  下载本文中用到的两个C++项目(Eclipse+CDT项目,环境按第一部分的说明配置),下载后解压。

  然后在Eclipse中使用File->Import->Genaral::Existing Project into Workspace向导即可把下载的项目导入到开发环境中。便会看到如下图的项目:

  如果Build成功,Run起来以后,可以看到如下的运行结果:

  这个例子实际上和上一部分中的例子效果是一样的。不同的是,本例中使用了静态库的方式来完成,这样更可以看出程序在扩展意义上的实践。那么如何建立一个静态库(static library)?又如何在另一个项目中引用这个库?下面两个小节就是分别回答这两个问题的。

  4.2 静态库项目的建立

  静态库项目的建立在CDT中是非常方便的。用新建向导中的 New -> C++ Project -> Static Library -> Empty Project即可建立成功。然后可以在该项目中进行代码的编写。如果编译成功,可以看到项目结构如下所示:

  注意那个Archives里面生成的一个***.a文件,这就是代码编译生成的静态库。

  4.3 静态库项目的调用

  下面就来新建一个普通C++项目,来引用并调用上一小节库中的代码。新建的过程也很简单,就用新建向导中的New -> C++ Project -> Executable -> Empty Project即可。

  建完以后,来添加对4.2中所建立的静态库的引用。

  1:头文件

  因为我们要对静态库中的类进行调用并扩展,所以一般需要引用静态库项目中的一个对外公布的头文件(如本例中的InshionLib.h)。

    图片看不清楚?请点击这里查看原图(大图)。

  具体做法如上图所示,在/C/C++ Build -> Settings 中的GCC C++ Compiler的Directories中把需要引用的静态库的Include paths添加进来。这样做的目的是为了让Inshion_Exa002_Caller项目(下简称Caller项目)中的#include "InshionLib.h"能正确通过。

  2:引用库和参数配置

  当然,只引入头文件是远远不够的。以Caller项目为例,如果只是添加了头文件目录,然后就编译那几个源码的话,一般会出现如下的错误:

双击代码全选
1
2
3
4
undefined reference to `WinMain@16'
undefined reference to `TextOutA@20'
undefined reference to `SetBkColor@8'
等等等等……

  所以我们还需要把Lib项目生成的库引进来,同时设置WindowsAPI调用需要添加的配置参数。具体作法如下图所示:

    图片看不清楚?请点击这里查看原图(大图)。

  具体地说就是在MinGW C++ Linker的Miscellaneous中的Other objects下,添加前文提到的静态库编译生成的***.a库文件。

  然后设置-lmingw32和-mwindows参数,分别参照以下两图进行:

    图片看不清楚?请点击这里查看原图(大图)。

    图片看不清楚?请点击这里查看原图(大图)。

  顺便提一下,其实-mwindows这个参数我们已经不陌生了,第三部分中就用过它,这里的使用与之是完全一样的。具体可参见本系列文章的第三部分。

  这样设置完成以后,就可以再Build该Caller项目了,应该就可以通过:D。

  4.3 其它可能遇到的问题

  在对源代码或者编译参数进行修改了以后,最好使用Eclipse菜单的Project -> Clean 功能对项目进行一下清理,以保证再次生成的时候我们的所有修改都是生效有。

  有时候,在对两个项目同时进行Clean并Build之后,会出现下面这样的提示:

  ..: No such file: No such file or directory

  其实他的意思是说那个***.a文件没有找到。这时候需要检查一下上文(4.2小节)提到的Archives里是否有我们想要的.a文件,如果我们的引用设置和Lib项目的.a文件都是正常的,说明这是Eclipse资源同步的问题,这时候并没有关系,再对Caller项目单独一下Build就行。

  这个问题不仅现在会遇到,后面我们还会看到,在使用资源文件(.res)生成.o文件的时候,常常也会发生。通常是.o文件明明已经生成了,但Eclipse的项目里却看不到,这时候只需要用F5刷新(或者在项目上点右键选刷新)一下该项目就能看到我们需要的文件,再编译连接就能正常。


这篇关于用Eclipse + CDT + MinGW做Windows编程第四部分:将可重用的部分做成静态库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/913854

相关文章

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四:

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。