`
fulerbakesi
  • 浏览: 570523 次
文章分类
社区版块
存档分类
最新评论

静态库的制作与使用(包含测试例子)

 
阅读更多

/*********************************************************************
* Author : Samson
* Date : 06/30/2012
* Test platform:
* GNU Linux version 2.6.29.4
* gcc version 4.4.0 20090506 (Red Hat 4.4.0-4) (GCC)

* *******************************************************************/

在传统的静态程序库中,生成的代码通常封装在一个程序库文件中(其名称以 .a 结尾),

linux下静态库的建立与使用,一般都是采用ar命令进行制作,ar crv 生成的静态库名 生成的可执行程序1 生成的可执行程序2……
下面就编写一个简单的示例程序,来更清楚的了解一下制作一个静态链接库的过程。

先定义一个头文件test1.h,内容如下:
#include <stdlib.h>
#include <stdio.h>

void test1();
void test2();

再分别建立两个C文件,一个为test1ForStaticDll.c,内容如下:
#include "test1.h"

void test1()
{
printf("this is test1\n");
}
一个为test2ForStaticDll.c, 内容如下:
#include "test1.h"

void test2()
{
printf("this is test2\n");
}
分别生成这两个C文件的目标文件,命令行如下:
gcc -c test1ForStaticDll.c -o lib_test1.o
gcc -c test2ForStaticDll.c -o lib_test2.o
使用nm命令分别查看编译生成的两个目标程序,如下:
[root@UFO dlltest]# nm lib_test1.o
U puts
00000000 T test1
[root@UFO dlltest]# nm lib_test2.o
U puts
00000000 T test2
然后使用ar把这两个目标程序打包成一个静态链接库文件,如下:
ar crv libtest.a lib_test1.o lib_test2.o
命令行中的crv参数分别表示:
c:创建一个静态链接库
r:表示把目标插入到静态链接库文件中
v:打印出创建过程中的相关信息
再使用nm命令查看打包后的静态链接库文件中包含的函数符号信息,如下:
[root@UFO dlltest]# nm libtest.a

lib_test1.o:
U puts
00000000 T test1

lib_test2.o:
U puts
00000000 T test2

以上是生成一个静态库的全过程,下面我们再编写一个测试文件testDll.c文件,内容如下:
#include "test1.h"

int main()
{
test1();
test2();
printf("this is main\n");
return 0;
}
编译测试文件testDll.c,编译命令行为:
gcc -o testdll.out testDll.c libtest.a
然后执行生成的可执行程序testdll.out, 执行结果如下:
[root@UFO dlltest]# ./testdll.out
this is test1
this is test2
this is main


分享到:
评论

相关推荐

    jquery ajax json struts2最简单例子测试成功

    在"jquery ajax json struts2最简单例子测试成功"的项目中,我们可以推断出以下几个关键点: 1. **整合jQuery与AJAX**:项目中可能使用jQuery的$.ajax()方法来发送异步请求。$.ajax()提供了一种方式,通过HTTP GET...

    基于proteus和AVR单片机的中断使用例子

    4. **Proteus仿真**:Proteus是一款强大的电子设计自动化工具,支持电路原理图设计、元器件库、PCB布局以及硬件与软件联合仿真。在本例中,Proteus用于构建和验证Atmega16的中断系统和数码管显示电路的模拟行为。 5...

    自己学习tapestry后做的小例子

    通过这个小例子,你可以学习到Tapestry如何处理页面和组件、如何管理状态、如何进行事件处理以及如何与其他Java库和框架集成。Tapestry强调组件化开发,使得代码可重用性高,且提供了强大的模板语言和类型安全的API...

    egret小结及小例子

    4. **游戏开发流程**:使用 Egret 开发游戏通常包括创建项目、设计资源、编写代码、集成音效、制作动画、调试和发布等步骤。博主可能在文章中详细介绍了这些流程中的某些关键点。 5. **源码**:标签中的“源码”...

    JSP动态网页制作技术.doc

    与微软的ASP技术相似,但JSP使用的是Java语言而不是VBScript,这使得JSP具有更强的跨平台能力和更广泛的应用范围。 JSP的优势在于其灵活性和可扩展性。通过使用JSP,开发者可以避免编写大量重复的服务器端脚本,...

    一个游戏背景生成例子(delphi)

    Delphi是一款强大的面向对象的编程语言,常用于桌面应用开发,包括游戏制作。本示例将探讨如何使用Delphi来创建游戏背景。 首先,理解游戏背景的基本构成。游戏背景通常包括静态元素(如地形、建筑物)和动态元素...

    易语言-锐浪报表Grid++Report 静态编译模块6.0

    模块名称:锐浪类封装 版本:6.0 锐浪报表Grid++Report 静态编译模块6.0 ---------------------------------------------------...例子里基本包括了各种报表的使用,欢迎测试,日常的操作使用例子里基本都包含了 一帆风

    WinIo.zip内含64位32位文件

    库文件可能是已经编译好的动态或静态库,测试工具则可能是一些用于验证WinIo功能是否正常工作的小程序。 总的来说,WinIo是一个强大的工具,尤其对于需要低级别硬件交互的开发者来说,它提供了便捷的接口和广泛的...

    android动画制作详解

    10. **测试与调试**:在开发过程中,使用Android Studio的布局预览和动画预览功能可以帮助设计和调试动画。此外,`setDuration()`方法可以调整动画时长,`setStartOffset()`可以设置动画延迟启动时间,便于调整动画...

    Python第三方库

    它包括图形和声音库,可以用来制作2D游戏。 6. **网络编程库**:Selenium是一个用于Web应用程序测试的工具,也可以用于网页抓取,它允许Python脚本控制浏览器。 对于第三方库的安装,Python社区普遍推荐使用pip...

    6个c#源码.zip

    3. **函数与方法**:C#中的函数或方法是代码重用的核心,源码中可能会包含不同类型的函数,如主函数Main()、用户自定义函数以及静态与非静态方法。 4. **数组与集合**:C#支持一维、二维和多维数组,同时也引入了...

    ZynAddSubFx的修改以使用Qt工具包和CMake构建系统_C++_Shell_下载.zip

    在ZynAddSubFX的构建和发布流程中,可能包含了使用Shell脚本来执行特定操作的环节,如编译、打包或者运行测试。 **项目结构与下载** "zynqt-master"这个文件名暗示了这是ZynAddSubFX项目的一个分支或版本,且重点...

    支持奥运事业,用MFC制作五环旗

    6. **事件处理**:虽然这个例子主要关注静态显示,但如果你希望用户能与五环互动,如点击或拖动,你需要添加事件处理代码。MFC提供了`ON_WM_LBUTTONDOWN()`等消息处理宏,你可以根据需要响应用户的输入。 7. **资源...

    CanPhotos,壁画.zip

    这个项目可能与图像处理、艺术或者是数字壁画制作有关,因为"壁画"通常与视觉艺术相关,而"CanPhotos"可能是项目名称的简称,暗示了它与摄影或图像创作有所关联。 在开源项目的世界里,"CanPhotos-master"通常代表...

    vc++ 应用源码包_1

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_2

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_6

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_3

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_5

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    类似百度地图的搜索代码

    4. **用户界面设计**:使用MFC,开发者可以创建一个包含搜索框、地图视图等元素的用户界面。MFC提供了对话框模板和控件,如CEdit(编辑框)用于输入搜索关键词,CStatic(静态文本)显示提示信息,以及自定义控件来...

Global site tag (gtag.js) - Google Analytics