用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 Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重