用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

相关文章

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间