linux下动态库(一)
来源:互联网 发布:淘宝怎样找货源 编辑:程序博客网 时间:2024/06/13 13:19
头文件
/* @ File Name: calc.h @ Author: hw @ Mail: feiyelove@163.com @ Created Time: 2015-07-01 14:42:00*/#ifndef _CALC_H_#define _CALC_H_#ifdef __cpluscplusextern "C"{#endifint add(int a, int b);int sub(int a, int b);#ifdef __cpluscplus}#endif#endif
实现体
/* @ File Name: calc.c @ Author: hw @ Mail: feiyelove@163.com @ Created Time: 2015-07-01 14:39:26*/#include "calc.h"#ifdef __cpluscplusextern "C"{#endifint add(int a, int b){ return a + b;}int sub(int a, int b){ return a - b;}#ifdef __cpluscplus}#endif
测试程序
/* @ File Name: test.c @ Author: hw @ Mail: feiyelove@163.com @ Created Time: 2015-07-01 17:50:16*/#include <stdio.h>#include <stdlib.h>#include "calc.h"int main(){ printf("test add [ 1+2 = %d]\n", add(1,2)); printf("test sub [ 1-2 = %d]\n", sub(1,2)); return 0;}
Makefile
CC = gccCFLAGS =LDFLAGS = -shared -fPICINC = -I.LIBS =DLL = libcalc.soTESTOBJS = test.oOBJS = $(filter-out $(TESTOBJS),$(patsubst %.c,%.o,$(wildcard *.c)))$(DLL):$(OBJS) $(CC) $(LDFLAGS) -o $(DLL) $(OBJS)$(OBJS):%.o:%.c $(CC) $(CFLAGS) $(INC) -c $< -o $@$(TESTOBJS):%.o:%.c $(CC) $(CFLAGS) $(INC) -c $< -o $@test:$(TESTOBJS) $(CC) -o test $(TESTOBJS) $(DLL)clean: rm -f *.o rm -f $(DLL) test
上述就是一个简单的linux动态库实现
编译动态库
$ make
查看动态库导出符号
$ nm -D libcalc.so w _Jv_RegisterClasses0000152c A __bss_start w __cxa_finalize w __gmon_start__0000152c A _edata00001534 A _end00000414 T _fini00000280 T _init000003bc T add000003c7 T sub
可以看到 add sub 两个接口类型为T,说明接口成功导出
编译测试程序
$ make test
执行测试程序
$ ./test test add [ 1+2 = 3]test sub [ 1-2 = -1]
0 0
- linux下动态库(一)
- i386 Linux下 ELF 动态链接分析 (一)
- Linux下GCC生成和使用静态库和动态库详解(一)
- linux下动态库
- Linux下动态库
- linux下的动态库(转)
- linux下的动态库(转)
- linux下如何动态加载动态库(loadlibrary)
- linux下的动态库
- Linux下动态链接库
- Linux下动态加载库
- linux下连接动态库
- linux下的动态库
- linux下的动态库
- Linux下的动态库
- linux下使用动态库
- linux下CUDA动态库
- linux下加载动态库
- 百练 4103 踩方格
- Nginx 服务器安装及配置文件详解
- OverFeat笔记
- 8种排序算法
- TCP 3次握手模式(3-WAY HANDSHAKE)
- linux下动态库(一)
- poj 1988 Cube Stacking(并查集)
- Erlang:第一个Erlang程序,模块,函数
- OC基本对象类型
- Spring事务配置的五种方式
- C# 抽象工厂
- centos内核升级
- Mysql 选择优化的数据类型
- Android 的 Handler 总结