`
oraclestudy
  • 浏览: 480620 次
文章分类
社区版块
存档分类

在Linux环境下编写和使用静态函数库

 
阅读更多

libsth.h中声明函数定义:

/*

* libsth.h

* Declarations for simple error-handling library

*/

#ifndef _LIBSTH_H

#define _LIBSTH_H

#include "stdarg.h"

/*

* ADD

*/

int ADD(int a, int b);

/*

* SUBSTRACT

*/

int SUBSTRACT(int a, int b);

/*

* TIMES

*/

int TIMES(int a, int b);

/*

* DIVIDE

*/

float DIVIDE(int a, int b);

#endif

libsth.C中实现libsth.h中定义的函数:

/*

* libsth.C

* Implementation of the functions defined in libsth.h

*/

#include "stdarg.h"

#include "stdlib.h"

#include "stdio.h"

#include "string.h"

#include "libsth.h"

int ADD(int a, int b)

{

return a + b;

}

int SUBSTRACT(int a, int b)

{

return a - b;

}

int TIMES(int a, int b)

{

return a * b;

}

float DIVIDE(int a, int b)

{

return (float)((float)a / (float)b);

}

teststh.C中使用函数库(libsth.a)中的函数

/*

* teststh.C

* Testing program for libsth library

*/

#include "stdio.h"

#include "stdlib.h"

#include "libsth.h"

#include "iostream.h"

int main(void)

{

int a = ADD(1, 2);

int b = SUBSTRACT(2, 1);

int c = TIMES(1, 2);

float d = DIVIDE(3, 2);

cout << a << " " << b << " " << c << " " << d << endl;

//printf("%d %d %d %f/n", a, b, c, d);

exit(EXIT_SUCCESS);

}

下面是c++版的makefile

teststh:teststh.o

g++ teststh.o -static -L. -lsth -L/usr/lib/gcc-lib/i386-redhat-linux/3.2.3 -lstdc++ -o teststh

teststh.o:teststh.C

g++ -c teststh.C -Wno-deprecated -o teststh.o

libsth.a:libsth.o

ar rcs libsth.a libsth.o

libsth.o:libsth.C libsth.h

g++ -c libsth.C -o libsth.o

all:libsth.a teststh

clean:

rm -f *.o *.a teststh

说明:

1 -L. -lsth -L/usr/lib/gcc-lib/i386-redhat-linux/3.2.3 -lstdc++显示地使用了两个静态库,即libsth.alibstdc++.a,因为使用g++ -static编译时它不会自动搜索到这个库,因此必须用 –L选项显式指定;

2 -Wno-deprecated是为了屏蔽在用g++ make程序时产生的一些警告信息,这些警告信息认为“iostream.h”中所定义的某些函数是过时的,但是还可以用;

3 ar rcs libsth.a libsth.o是使用ar命令的rcs选项将libsth.o打包成libsth.a

下面是c版的makefile

teststh:teststh.o

gcc teststh.o -static -L. -lsth -o teststh

teststh.o:teststh.c libsth.h

gcc -c teststh.c -o teststh.o

libsth.a:libsth.o

ar rcs libsth.a libsth.o

libsth.o:libsth.C libsth.h

g++ -c libsth.C -o libsth.o

all:libsth.a teststh

clean:

rm -f *.o *.a teststh

分享到:
评论

相关推荐

    老生常谈C语言静态函数库的制作和使用

    根据使用库函数时,函数库加载时机的差异,将函数库分为静态函数库和动态函数库,具体差异是:C语言程序如果使用静态函数库的函数,那么整个函数库的代码都会和C语言程序一起编译成可执行代码,程序的体积会膨胀;...

    为Linux应用程序编写DLL程序函数

    Linux 中的应用程序以以下两种方式之一链接到外部函数:要么在构建时与静态库( lib*.a)静态地链接,并且将库代码包含在该应用程序的可执行文件里;要么在运行时与共享库( lib*.so)动态地链接。通过动态链接装入...

    xcode 详解创建静态库和动态库的方法

    xcode 创建静态库和动态库 1、linux中静态库和动态库区别: 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中...相对于静态函数库,动态函数库在编译的时候 并没有被编译进目标代码中,你的程序执行到相关

    Linux静态库与动态库实例详解

    1. Linux 下静态链接库编译与使用 首先编写如下代码: // main.c #include test.h int main(){ test(); return 0; } // test.h #include using namespace std; void test(); // test.c #include test.h void test...

    LINUX安装与配置简明手册

    本书详细介绍如何在个人电脑上安装配置Caldera和Red Hat两种发行版本的Linux操作系统,并能帮助用户解决安装和配置过程中出现的各种问题。本书既能指导你进行基本的安装步骤,也能指导你定制独具特色的Linux 操作...

    Linux的常用命令cat、sed、zip等用法,以及shell编程的基本语法,以及makefile编写方式等等

    3.lvim工作方式、gcc、gdb用法、动态库和静态库的制作与使用、makefile的编写语法,以及makefile里面的模式匹配、函数、伪目标等知识,以及文件描述符、文件操作(open、close、lseek、stat、dup等语法) 3.进程:进程...

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    wxWidgets与libctb库编写的串口通讯程序

    5.以上修改只在Windows下测试通过,我手头没有Linux环境,对Linux相关的代码基本是靠着意念盲改,如果您发现了有错误疏漏,欢迎指正,能帮我改改就更好了,比如Linux下如何取得串口设备名我就还没弄明白。...

    linux安装与配置简明手册

    本书详细介绍如何在个人电脑上安装配置Caldera和Red Hat两种发行版本的Linux操作系统,并能帮助用户解决安装和配置过程中出现的各种问题。本书既能指导你进行基本的安装步骤,也能指导你定制独具特色的Linux 操作...

    opencv3.4.11.zip

    OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。

    LightGUI一个轻量级的GUI

    全部由C代码编写,自带基本的C函数库,数学函数库,可以在window,嵌入式设备间无缝移植。 模拟器带来良好的调试特性,界面的相关bug,可以方便的在模拟器上调试,极大的加快软件的开发进度。 支持内存调试模式,...

    学习《深入理解程序设计 使用Linux汇编语言》的代码.zip

    - **无高级抽象**:缺乏高级语言中的类、对象、函数库等高级抽象概念,所有编程结构如循环、条件分支等都需要手工实现。 - **依赖特定硬件**:汇编程序直接依赖于特定处理器的指令集、寄存器组织和寻址模式,更换...

    Linux1.0核心游记

    Linux1.0核心游记 &lt;br&gt;第一部分 基础知识(Basic knowledge ).....................................................................11 软件部分(Software part)........................................

    传智播客扫地僧视频讲义源码

    11_项目中检索内存泄漏使用和基本原理 12_动态库基本知识和环境调试注意 13_动态库内存释放问题 源码及文档 01_上一次课程回顾 02_链表热身_结构体中套元素和指针 03_结构体数据类型的嵌套定义和函数的嵌套调用是两...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    一、Qt Creator 的安装和hello world 程序的编写(原创) 1.首先到Qt 的官方网站上下载Qt Creator,这里我们下载windows 版的。 下载地址:http://qt.nokia.com/downloads 如下图我们下载:Download Qt SDK for ...

    易语言5.1 破解版

    “在库中的对应命令名”请务必准确填写静态库中公开导出的符号名称(C函数(cdecl)编译后,符号名称通常是在函数名称前加下划线(_));“在库中的对应命令名”以@开头表示以cdecl方式调用,否则表示以默认的stdcall...

    log4cplus 源码(C++编写的开源的日志系统)

    4. 实例化一个logger对象,调用静态函数:log4cplus::Logger::getInstance("logger_name") 5. 将appender对象绑定(attach)到logger对象,如省略此步骤,标准输出(屏幕)appender对象会绑定到logger 6. 设置logger的...

    golang入门-linux安装配置与规则

    特点 静态类型(可以声明类型,也可以自动推断),编译型(可编译为二进制... 第三方函数库暂时不像绝对主流的编程语言那样丰富。 linux 安装与配置 去go官方网站下载相应版本的安装包,注意操作系统和计算架构(32bit

    Android应用程序开发教程PDF电子书完整版、Android开发学习教程

    • 系统 CCCC 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。 • 媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时...

    Apache JMeter (apache-jmeter-5.4.3.zip)

    Apache JMeter (apache-jmeter-5.4.3.zip)可用于测试静态和动态资源、Web 动态应用程序的性能。 它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。 Apache ...

Global site tag (gtag.js) - Google Analytics