在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.a和libstdc++.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语言程序一起编译成可执行代码,程序的体积会膨胀;...
Linux 中的应用程序以以下两种方式之一链接到外部函数:要么在构建时与静态库( lib*.a)静态地链接,并且将库代码包含在该应用程序的可执行文件里;要么在运行时与共享库( lib*.so)动态地链接。通过动态链接装入...
xcode 创建静态库和动态库 1、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...
本书详细介绍如何在个人电脑上安装配置Caldera和Red Hat两种发行版本的Linux操作系统,并能帮助用户解决安装和配置过程中出现的各种问题。本书既能指导你进行基本的安装步骤,也能指导你定制独具特色的Linux 操作...
3.lvim工作方式、gcc、gdb用法、动态库和静态库的制作与使用、makefile的编写语法,以及makefile里面的模式匹配、函数、伪目标等知识,以及文件描述符、文件操作(open、close、lseek、stat、dup等语法) 3.进程:进程...
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
5.以上修改只在Windows下测试通过,我手头没有Linux环境,对Linux相关的代码基本是靠着意念盲改,如果您发现了有错误疏漏,欢迎指正,能帮我改改就更好了,比如Linux下如何取得串口设备名我就还没弄明白。...
本书详细介绍如何在个人电脑上安装配置Caldera和Red Hat两种发行版本的Linux操作系统,并能帮助用户解决安装和配置过程中出现的各种问题。本书既能指导你进行基本的安装步骤,也能指导你定制独具特色的Linux 操作...
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。
全部由C代码编写,自带基本的C函数库,数学函数库,可以在window,嵌入式设备间无缝移植。 模拟器带来良好的调试特性,界面的相关bug,可以方便的在模拟器上调试,极大的加快软件的开发进度。 支持内存调试模式,...
- **无高级抽象**:缺乏高级语言中的类、对象、函数库等高级抽象概念,所有编程结构如循环、条件分支等都需要手工实现。 - **依赖特定硬件**:汇编程序直接依赖于特定处理器的指令集、寄存器组织和寻址模式,更换...
Linux1.0核心游记 <br>第一部分 基础知识(Basic knowledge ).....................................................................11 软件部分(Software part)........................................
11_项目中检索内存泄漏使用和基本原理 12_动态库基本知识和环境调试注意 13_动态库内存释放问题 源码及文档 01_上一次课程回顾 02_链表热身_结构体中套元素和指针 03_结构体数据类型的嵌套定义和函数的嵌套调用是两...
一、Qt Creator 的安装和hello world 程序的编写(原创) 1.首先到Qt 的官方网站上下载Qt Creator,这里我们下载windows 版的。 下载地址:http://qt.nokia.com/downloads 如下图我们下载:Download Qt SDK for ...
“在库中的对应命令名”请务必准确填写静态库中公开导出的符号名称(C函数(cdecl)编译后,符号名称通常是在函数名称前加下划线(_));“在库中的对应命令名”以@开头表示以cdecl方式调用,否则表示以默认的stdcall...
4. 实例化一个logger对象,调用静态函数:log4cplus::Logger::getInstance("logger_name") 5. 将appender对象绑定(attach)到logger对象,如省略此步骤,标准输出(屏幕)appender对象会绑定到logger 6. 设置logger的...
特点 静态类型(可以声明类型,也可以自动推断),编译型(可编译为二进制... 第三方函数库暂时不像绝对主流的编程语言那样丰富。 linux 安装与配置 去go官方网站下载相应版本的安装包,注意操作系统和计算架构(32bit
• 系统 CCCC 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。 • 媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时...
Apache JMeter (apache-jmeter-5.4.3.zip)可用于测试静态和动态资源、Web 动态应用程序的性能。 它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。 Apache ...