快速业务通道

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

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-19
1. 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 2. c 文件 /* * libsth.C * Implementation of the functions defined in libsth.h //实现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); } 3. 测试库中的函数 /* * 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); //缺省#define EXIT_SUCCESS 0 ,exit(0)退出程序 } 下面是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 特别说明: [root@localhost dss]# gcc -o abc abc.cpp
/tmp/ccY3hmyr.o(.eh_frame 0x11): undefined reference to `__gxx_personality_v0''
collect2: ld returned 1 exit status
[root@localhost dss]# gcc -o abc abc.cpp -lstdc
有两种讲法: 1. Linux Develop Notes * 编译 c 程序需要添加 -lstdc option. sample: gcc -lstdc -o test test
.c,否则会报 "undefined reference to ''__gxx_personality_v0'' " 错误
2. 唉,用gcc命令编译C程序,用g 命令编译C 程序. 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qiek/archive/2006/02/09/595400.aspx 说明: 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. -lst

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号