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

静态库的简单示例

    博客分类:
  • C
阅读更多

本文将创建一个小型函数库,它包含两个函数,然后将在一个示例程序中调用其中一个函数。这两个函数分别是hello和goodbye,他们只打印简单的文本信息。

 

1、为两个函数分别创建各自的源文件(分别命名为hello.c和goodbye.c)

     (1) hello.c

#include <stdio.h>

void hello(int arg) {
  printf("Hello, %d\n", arg);
}

    (2) goodbye.c

#include <stdio.h>

void goodbye(char *arg) {
 printf("goodbye, %s\n", arg);
}

 

2、你可以分别编译这些函数来产生要包含在库文件中的目标文件。可以通过调用带有-c选项的C语言编译器来完成,-c选项的作用是阻止编译器创建一个完整的程序。如果此时试图创建一个完整的程序将不会成功,因为你还未定义main函数。

$ gcc -c hello.c goodbye.c

$ ls *.o
hello.o   goodbye.o

  

3、现在编写一个调用goodbye函数的程序。

首先,为你的库文件创建一个头文件。这个头文件将声明你的库文件中的函数,它应该被所有希望使用你的库文件的应用程序所包含。

 

    lib.h

void hello(int);
void goodbye(char *);

 

4、调用程序(program.c)非常简单。它包含库的头文件并且调用库中的一个函数。

#include <stdlib.h>
#include "lib.h"

int main() {
 goodbye("Hello World");
 exit(0);
}

 

5、现在,你可以编译并测试这个程序了。暂时为编译器显式指定目标文件,然后要求编译器编译你的文件并将其与先前编译好的目标模块goodbye.o链接。

$ gcc -c program.c

$ gcc -o program program.o goodbye.o

$ ./program
goodbye, Hello World

 

6、现在,将创建并使用一个库文件。使用ar程序创建一个归档文件并将你的目标文件添加进去。这个程序之所以称为ar,是因为它将若干单独的文件归并到一个大的文件中以创建归档文件或集合。

$ ar crv lib.a hello.o goodbye.o
a - hello.o
a - goodbye.o

 

7、库文件创建好了,两个目标文件也已添加进去。在某些系统,尤其是从Berkeley Unix衍生的系统中,要想成功使用函数库,你还需要为函数库生成一个内容表,可以通过ranlib命令来完成。

$ ranlib lib.a

函数库现在可以使用了,你可以在编译器使用的文件列表中添加该库文件来创建你的程序。

$ gcc -o program program.o lib.a

$ ./program
goodbye, Hello World

 

分享到:
评论

相关推荐

    Qt下使用C++调用静态库及动态库示例程序

    使用简单的程序展示了C++调用动态库和静态库的方法。 文件结构: exe:笔者部署可运行文件,因开发环境版本不同,可能存在无法直接使用的情况,两个部署文件(copy_ldd.sh及useLib1.sh)可以结合文章分享的(ubuntu下...

    Qt C++静态库编写和调用示例

    在本文中,我们将深入探讨如何在Qt环境中使用C++创建和使用静态库。Qt是一个流行的开源框架,广泛用于开发跨平台的桌面和移动应用程序。在某些情况下,将代码组织为静态库可以提高代码重用性,减少依赖性,并简化...

    xcode 制作静态库

    本文将基于给定文件中的描述,深入探讨如何在Xcode中创建静态库,并演示一个简单的示例。 #### 创建静态库步骤详解 ##### 1. 静态库工程的建立 首先,启动Xcode并选择“File” &gt; “New” &gt; “Project”,在新项目...

    编译与加载静态库(.a)

    在你的压缩包文件 `TestStaticLib` 中,可能包含了创建和使用静态库的示例代码、编译脚本和其他相关资源。你可以按照上述步骤操作,了解静态库的创建和加载过程。通过学习和实践,你可以更好地理解和掌握静态库在...

    botan静态库以及其头文件(绝对可用)

    在本文中,我们将深入探讨Botan静态库及其头文件,以及它们如何与SSH(Secure Shell)协议相关联。 首先,让我们理解什么是静态库。静态库是一组预编译的对象文件,它们在程序链接阶段被合并到可执行文件中,形成一...

    android 简单demo实现将c++代码 编译成静态库和动态库

    例如,创建一个`HelloJNI.cpp`文件,写入以下简单示例: ```cpp #include #include extern "C" JNIEXPORT jstring JNICALL Java_com_example_yourpackage_HelloJNI_stringFromJNI( JNIEnv *env, jobject /* ...

    Linux静态库和动态库

    为了理解静态库和动态库的创建及使用,可以通过编写简单的测试代码进行实践。准备测试代码`hello.h`、`hello.c`和`main.c`,其中`hello.h`为库的头文件,`hello.c`包含公用函数`hello()`,而`main.c`用于调用该函数...

    curl静态库7.57

    使用`curl`库进行HTTP请求的简单示例: ```c #include int main() { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, ...

    opencv3.4.1静态连接库及其调用程序示例

    在给定的压缩包中,除了静态库文件,可能还包括一个简单的调用示例工程,你可以通过它来学习如何实际操作。这个示例工程展示了如何初始化OpenCV、加载图像、进行基本操作,并显示结果。通过分析和运行这个示例,你...

    举例分析Linux动态库和静态库

    ### 举例分析Linux动态库和静态库 #### 静态库与动态库的基本概念 在Linux环境下,静态库和动态库是两种常见的链接库形式,它们分别在编译和运行阶段发挥着不同的作用。 **静态库**在程序编译过程中会被链接到...

    opengl动态静态库

    4. **示例代码**:可能包含一些简单的OpenGL程序示例,帮助用户了解如何使用这些库进行图形渲染。 5. **编译设置或配置文件**:可能包含编译器所需的设置信息,比如链接库的路径、预处理器宏定义等,以确保正确编译...

    VS2005 下编译的cjson的静态库和动态库文件

    在项目属性页中,导航到“配置属性” &gt; “C/C++” &gt; “预处理器”,可能需要添加预处理器定义,例如`CJSON_EXPORTS`,这取决于你是编译动态库还是静态库。 5. **编译项目**:现在你可以编译项目。如果一切设置正确...

    windows下libcurl静态库

    创建一个简单的示例程序,引入libcurl的头文件,链接你刚刚生成的静态库,以验证库是否正常工作。如果能成功执行网络请求,说明静态库编译无误。 请注意,尽管此过程基于VS2010,但基本步骤对于其他版本的Visual ...

    c#生成静态页(中小型网站模板技术(生成静态页)示例)

    功能:中小型网站模板技术(生成静态页)示例; 实现了主明细表; 实现了全局标签; 实现了简单的Repeat控件; 类型:免费开源; 网站文件: Index.aspx : 首页 (同时处理生成静态页逻辑) Static.htm : 静态模板...

    Luajit 静态库(含32位和64位)

    本资源包含 Luajit 的静态库,支持32位和64位操作系统,这使得开发人员能够在不同平台下方便地集成 Luajit 到他们的项目中。 首先,我们来详细了解一下 LuaJIT: 1. **LuaJIT 特性**: - **JIT 编译**:Luajit 的...

    静态库、共享库、动态库的创建和使用.txt

    假设我们有一个简单的静态库`libhello.a`,包含了以下文件: - **源文件** `libhello.c`: ```c #include void hello() { printf("hello, welcome to the library world!\n"); } ``` - **头文件** `libhello.h`: ...

    ffmpeg、opencv动态库静态库_linux平台使用

    本篇将详细介绍如何在Linux环境下,特别是内核版本为5.4.0的系统中,使用这些库的动态库和静态库。 1. ffmpeg动态库与静态库: - 动态库(.so文件):在运行时链接到程序,节省磁盘空间,但需要确保运行环境有相应...

    c++静态库文件.rar

    C++静态库是一种在程序编译时链接的库文件,它包含了编译好的代码,可以在多个目标文件之间共享。在本资源"cpp静态库文件.rar"中,你将找到一个C++编写的日志库,这是一套专门用于处理日志记录的工具,可以帮助...

    Iphlpapi静态库 lib,.h文件及获取mac地址的调用示例

    本主题将详细介绍"Iphlpapi静态库"以及如何使用它来获取MAC地址,这对于使用VC++进行网络编程的开发者来说至关重要。 "Iphlpapi"是Windows操作系统提供的一个动态链接库(DLL),它包含了处理IP层次的网络编程所需...

Global site tag (gtag.js) - Google Analytics