`
hereson
  • 浏览: 1453910 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

制作自己的静态链接库&&第九章 制作自己的动态链接库

阅读更多

Dev-Cpp/Mingw32 环境介绍(5)


上文回顾:


上文《Dev-Cpp/Mingw32 环境介绍(4)》我们介绍了如何使用 静态连接库。今天我们介绍如何制作自己的Mingw32的静态链接库。至于Win32下的那种静态连接库我想熟悉Win32的人应该很清楚如何制作。所以我们这里就不做介绍了。

 

第八章 制作自己的静态链接库


这是第八章,八这个数字很多人都喜欢。我也一样。(感觉好迷信啊。)这一章我们要来制作静态链接库,我相信各位一定会很高兴的。
首先我先简单介绍一下静态链接库的作用。我们知道,C/C++程序生成目标代码的过程有,编写代码,编译代码,连接代码,生成目标代码。在连接代码的时候,会将编译后的二进制代码连接成目标代码。但是,有些时候。我们想让程序导入必要的代码,而不想导入无用的代码到我们的程序中。我们该如何呢?很简单,使用静态连接库。使用它我们就可以实现将在程序中使用的函数导入的目的。
下面我们来一步步的学做静态链接库并且学会如何使用。
我们现在先写一段代码,你可以用Dev也可以用记事本也可以用任何你喜欢的文本编辑器。像我就比较喜欢vi或者emacs作为平时的文本编辑器。话说远了,现在言规正传。我们写下下面的代码。

//HelloWorld.c

#include <stdio.h>

void HelloWorld(void)
{
        printf("Hello World");
}

上面那段C代码各位应该很熟悉的吧,那么经典的Hello World好让我怀念啊。保存为HelloWorld.c以后我们就开始生成了。
首先,我们先编译HelloWorld.c

gcc -c HelloWorld.c -o HelloWorld.o

这样我们得到一个二进制的文件HelloWorld.o

接着我们生成静态库。

ar cqs libHelloWorld.a HelloWorld.o

这样我们党额静态链接库就好了。如果有需要可以将其他的二进制文件名加HelloWorld.o的后面将他们连接成一个静态链接库。另外,生成的静态库文件名必须为lib*.a

好了,现在我们来使用我们的库吧。

接下来,我们为了能够使用方便,写一个如下头文件。

//HelloWorld.h
void HelloWorld(void);

接着我们开始使用我们刚才生成的静态库。写一个main.c的文件。

//main.c

#include "HelloWorld.h"

int main(void)
{
        HelloWorld();
        return(0);
}

使用gcc编译,假设我们这里所有的文件都保存在同一个目录下。

gcc -c main.c -o main.o

然后我们连接程序。

gcc main.o -o main.exe -L"./" -lHelloWorld

如果顺利我们会得到一个main.exe的文件。

在控制台下输入main.exe或者main就可以出现 Hello World 这组单词。

看了上面的文章是否很兴奋想要生成自己的静态链接库?其实,我个人觉得mingw32生成静态链接库要比VC生成的简单。不知道你有没有这样的感觉。

当然,如果你要在Dev下使用静态连接库,也是可以的。方法我在上一章已经说过了。只是,如果你要使用自己的库必须设置路径。

只要在连接器参数中添加 -L"你的库的所在的文件夹" 或者 将你的库保存到Dev安装目录中的lib目录中。

好了,本文就介绍到这里。如果有什么问题,可以在这里留言。

问外音:


这篇文章其实我真的很喜欢,不是文章喜欢,而是内容很喜欢。不知道各位如何想。这里介绍了一个生成静态库的方法,感觉比VC生成的要简单。其实在gcc的Linux平台下生成动态连接库还要比VC下生成不知道要简单多少倍了。如果说Win32中用于开发最好的平台是win2000那么,在那么x86系统中用于开发的平台莫过于Linux了。这章的内容也许对许多的程序员都有些陌生,我实在担心各位会在实践中会碰到问题,所以在这里还是希望各位在遇到困难时多到这里提问。最后还是我的一句名言:不论是程序还是思想唯有通过不断的交流才能愈加完善。(看过《古畑任三郎》么?主角总喜欢在发表观点后,说一句:我是古畑任三郎。感觉我也和他一样了。不过,这的确是一部不错的影片。至少比国内许多侦探片都好,没有额外的剧情,没有你你我我的爱情。纯粹是从一个破案的角度来拍摄的。推荐各位看看。)

 

STUDIO软件开发组

北斗星君(黄庠魁)

Dev-Cpp/Mingw32 环境介绍(6)


上文回顾:
上文《Dev-Cpp/Mingw32 环境介绍(5)》中,我们了解了如何来制作静态连接库。的确,上一片文章至今已经很长时间了。所以,我这次会用更多的内容来回报各位读者的。下面我们就来说说如何制作动态链接库。

第九章 制作自己的动态链接库

“我没有做梦吧,Mingw32也能做win32的动态连接库?”对你没有做梦,我也没有胡说。下面我简单介绍一些动态库的生成和使用。
还是老样子,我们来开启Dev-Cpp,然后我们新建工程。选择DLL工程。这个就是我们的链接库。在新建以后,我们会生成一个dll.h和一个工程名.c文件。其中,dll.h中保存的是你动态库的函数。下面我们看看我的文件内容。

//dll.h
#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */


#endif /* _DLL_H_ */

#include <windows.h>

BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}

DLLIMPORT int HelloWorld(void);

//dll.h End

其中我在最后一行加入了自己的函数,HelloWorld。

下面我们来看看我的HelloWorld.c

//HelloWorld.c
#include "dll.h"

DLLIMPORT int HelloWorld(void)
{
    printf("Hello,World!");
    return(0);
}

//HelloWorld.c End

好了,我们就来编译吧。使用Dev的编译命令或者用如下命令。

我们将会得到两个文件。一个libHelloWorld.a,一个HelloWorld.dll。我们使用这两个文件就可以编程了。

文外音:
说实话,这次这篇文章和前几篇文章相比间隔确实有些长了。由于我前一阶段有些忙了,所以,这次为各位读者抱歉了。下面我们要学的是如何使用刚才我们编写的动态库。

第十章 使用自己的动态链接库

上文回顾:
上文,我们介绍了如何生成动态库。下面我们就来使用它吧。

新建一个工程main.c的文件如下

//main.c

#include <stdio.h>
#include <stdlib.h>
#include "dll.h"

int main()
{
HelloWorld();
return(0);
}

//main.c End

现在将刚才那个工程中的 dll.h libHelloWorld.a HelloWorld.dll文件复制到你现在工程的目录里。

然后,我们现在开启工程属性。在链接器一栏中加入

-l"HelloWorld"

保存工程后编译。一切成功后,我们就获得了使用动态链接库的方式了。以后我们只要修改链接库的HelloWorld就可以修改程序中的显示。希望这篇文章各位能满意。

文外音:
的确,现在很忙,所以文章的质量也下降了不少。不过还是希望给为能够多多谅解。最近在搞NASM汇编。发现其实Emcas和Nasm确实很不错。非常喜欢。不过,C我还是会追求的。只是,可能以后和各位的交流会少些,但是我还是会用我的文章来使各位获得有关Dev的内容。本系列文章,未完,待续。






STUDIO软件开发组(SDT)
STUDIO Development Team
北斗星君(黄庠魁)

分享到:
评论

相关推荐

    动态网页设计与制作实用教程

    第14章“浏览器动态网页的制作”讲解了使用行为和行为面板来制作动态效果,让静态网页变得更加生动。 第15章“服务器动态网页知识基础”介绍了ASP技术,包括脚本语言和数据库基础,以及如何搭建测试服务器,为动态...

    PB动态制作报表

    在这个场景中,我们不依赖任何第三方DLL(动态链接库)文件,而是完全通过PB自身的功能来实现报表的动态生成。 动态报表在IT领域具有重要意义,因为它允许开发者根据用户需求或实时数据变化灵活地调整报表格式和...

    Dreamweaver CS4网站制作从入门到精通视频教程下载第3章 开始网站制作之旅.zip

    在第三章“开始网站制作之旅”中,我们将涵盖以下几个关键知识点: 1. **环境设置与界面认识**:了解Dreamweaver CS4的工作环境,包括菜单栏、工具箱、属性面板等主要组成部分,以及如何自定义工作区以适应个人工作...

    网页制作教程电子教案

    网页制作教程电子教案是一套全面介绍网页制作技术的教育资源,旨在帮助初学者掌握网页设计的基础知识,同时也适合有一定...通过学习这个教程,你可以逐步从零开始,成长为一个能够独立制作静态和动态网页的专业人士。

    软件破解入门教程.txt

    第十七课 动态链接库 第十八课 通用控件 第十九课 树型视图控件 第二十课 窗口子类化 第二十一课 管道 第二十二课 超类化 第二十三课 系统托盘中的快捷图标 第二十四课 WINDOWS钩子函数 第二十五课:位图...

    Dreamweaver网页设计与制作(第二版素材+效果).rar

    Dreamweaver是一款强大的网页开发工具,广泛应用于创建静态和动态网站,提供直观的所见即所得编辑界面,适合初学者和专业开发者。 在学习和使用Dreamweaver的过程中,了解以下几个关键知识点至关重要: 1. **基本...

    自己动手制作linux:lfs最新中文版

    6. **库和依赖关系**:理解动态和静态库的区别,以及如何解决软件依赖关系。 7. **系统服务和守护进程**:学习如何安装和配置系统服务,如网络服务、日志记录等。 8. **安全性与权限**:了解Linux的用户权限模型,...

    动态网页设计

    **第13章 到第14章** 阐述了链接、库、模板和行为的使用,这些都是实现网页交互性和动态效果的关键。 **第15章 到第17章** 探讨了服务器端动态网页的知识基础,如ASP技术、脚本语言、数据库基础,以及如何建立动态...

    Flash CS5从新手到高手视频教程下载第9章 利用元件和库组织动画素材.zip

    在本“Flash CS5从新手到高手视频教程下载第9章 利用元件和库组织动画素材.zip”中,我们聚焦于一个核心概念——在Adobe Flash CS5中如何有效地利用元件和库来组织动画素材。这是一套针对初学者的视频教程,旨在帮助...

    Visual_C++精彩实例详解

    2. 本书例程大部分采用的是动态链接,读者在未装VC的PC机上运行每章例程中的可执行文件时,可能会出现找不到mfc42.dll等动态链接库的情况, 读者此时可采用静态链接,具体操作为:VC中菜单Project-&gt;Setting-&gt;...

    Visual_C++精彩实例详解.part2.rar

    2. 本书例程大部分采用的是动态链接,读者在未装VC的PC机上运行每章例程中的可执行文件时,可能会出现找不到mfc42.dll等动态链接库的情况, 读者此时可采用静态链接,具体操作为:VC中菜单Project-&gt;Setting-&gt;...

    Visual_C++精彩实例详解.part4.rar

    2. 本书例程大部分采用的是动态链接,读者在未装VC的PC机上运行每章例程中的可执行文件时,可能会出现找不到mfc42.dll等动态链接库的情况, 读者此时可采用静态链接,具体操作为:VC中菜单Project-&gt;Setting-&gt;...

    Visual_C++精彩实例详解.part5.rar

    2. 本书例程大部分采用的是动态链接,读者在未装VC的PC机上运行每章例程中的可执行文件时,可能会出现找不到mfc42.dll等动态链接库的情况, 读者此时可采用静态链接,具体操作为:VC中菜单Project-&gt;Setting-&gt;...

    Visual_C++精彩实例详解.part3.rar

    2. 本书例程大部分采用的是动态链接,读者在未装VC的PC机上运行每章例程中的可执行文件时,可能会出现找不到mfc42.dll等动态链接库的情况, 读者此时可采用静态链接,具体操作为:VC中菜单Project-&gt;Setting-&gt;...

    静态网页作品

    8. **代码组织**:良好的代码组织能提高代码可读性和维护性,可能采用了模块化或组件化的方法,如使用Web Components或第三方库如React或Vue。 9. **浏览器兼容性**:考虑到不同的浏览器对某些技术支持程度不同,...

    实习报告:网页制作实习报告-.docx

    7. **软件技术的应用**:Dreamweaver不仅支持静态页面的制作,还能生成动态内容,如表单、数据库集成,适用于电子商务、库存管理等企业级应用。它简化了复杂的网页开发过程,使得非程序员也能创建功能丰富的网页。 ...

    flash8教程第9章原件的使用技巧和管理.ppt

    《Flash8教程第9章原件的使用技巧与管理》主要探讨了在Flash8中如何有效利用和管理元件,包括图形元件、影片剪辑和按钮元件的使用,以及元件的管理和公用库的应用。以下是对这些知识点的详细阐述: 1. **图形元件的...

    [精选]《多媒体制作技术及应用》-ch9 网站设计.pptx

    第九章的《多媒体制作技术及应用》探讨了网站设计的核心概念和步骤,这对于理解现代互联网内容创作至关重要。网站设计不仅仅是创建美观的页面,更是一种综合信息处理、组织和创意表达的艺术。首先,我们要明白,一个...

Global site tag (gtag.js) - Google Analytics