做一个动态链接库
来源:互联网 发布:java反射机制的用途 编辑:程序博客网 时间:2024/06/07 17:43
写此文的目的是验证将C代码编译成so,随后将其放到Android平台供上层应用调用。这个库的名称为shooter。
动态链接库也叫共享库(shared object),将源码编译成二进制文件,在程序运行时动态的加载它。我们会把一些常用的通用的方法做成库以so的形式发布,
好处是有效的知识管理和有效的隐私保护。
libshooter.so
目前shooter只暴露一个A方法,头文件shooter.h如下:
//so demo#ifndef SHOOTER_H#define SHOOTER_H#ifdef __cplusplusextern "C" {#endifint A(int a);#endif
A方法完成了在1到100的是个随机数中找出最小的那个返回。
源文件shooter.c如下:
#include "shooter.h"#include "time.h"#include <stdio.h>void bubble_sort(int *array,int n) { int i,j,tmp; for(i=0;i<n-1;i++) { for(j=n-1;j>i;j--) { if(array[j-1]>array[j]) { tmp = array[j-1]; array[j-1]=array[j]; array[j]=tmp; } } }}int A(int a) { int n = 10; int array[n],i; srand(time(NULL));//随机种子 for(i=0;i<n;i++) { array[i] = rand()%100+1;//1~100内随机数 printf("%d, ",array[i]); } printf("\n"); bubble_sort(array,n); return array[0];}
将其编译成so库。操作系统为ubuntu 14.04,gcc版本为4.8.4
$ gcc -c -fPIC -o shooter.o shooter.c$ gcc -shared -o libshooter.so shooter.o$ lltotal 76drwx------ 2 linc linc 4096 10月 31 11:46 ./drwx------ 7 linc linc 4096 10月 20 20:06 ../-rwxrwxr-x 1 linc linc 8251 10月 31 11:46 libshooter.so*-rw-rw-r-- 1 linc linc 469 10月 31 11:32 shooter.c-rw------- 1 linc linc 137 10月 31 11:22 shooter.h
测试其功能
新建shooter_tester.c调用此so的方法,验证其功能。
#include <stdio.h>#include "shooter.h"int main() { int result = A(0); printf("A result: %d\n",result); return 0;}
编译运行:
$ gcc -o shooter_tester shooter_tester.c -lshooter -L.$ ./shooter_tester ./shooter_tester: error while loading shared libraries: libshooter.so: cannot open shared object file: No such file or directory
还是没有找到so文件:
$ ldd shooter_tester linux-vdso.so.1 => (0x00007ffea5997000) libshooter.so => not found libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f47715bb000) /lib64/ld-linux-x86-64.so.2 (0x00007f4771980000)
解决办法参考网友Vamei(第三个链接):
$ gcc -o shooter_tester shooter_tester.c -lshooter -L. -Wl,-rpath=.$ ./shooter_tester 92, 6, 79, 33, 32, 24, 93, 79, 44, 22, A result: 6
库已建好,等你来用!Shooter!
参考:
http://blog.csdn.net/liming0931/article/details/7272696
http://blog.chinaunix.net/uid-26833883-id-3219335.html
http://www.cnblogs.com/vamei/archive/2013/04/04/2998850.html
0 0
- 做一个动态链接库
- C++做一个真正动态链接的DLL的做法
- C++做一个真正动态链接的DLL的做法
- C++创建一个动态链接库
- 创建一个MFC动态链接库
- 如何创建一个动态链接库DLL
- 程序加载一个动态链接库dll
- C++创建一个动态链接库工程
- 用动态链接库做系统测试的插件
- 用django做一个链接
- 升级动态链接库及创建一个简单的动态链接库、使用载入时动态链接、使用运行时动态链接的示例,译自MSDN
- AJAX做一个动态进度条
- ldconfig是一个动态链接库管理命令
- 四. 一个简单的DLL(非MFC动态链接库)
- ldconfig是一个动态链接库管理命令
- 如何完成一个动态链接库,完成JNI调用实例
- linux下编译动态链接库的一个小例子
- 创建一个动态链接库 (DLL),使用VS2010
- 使用sLDA
- 快速开发平台ServerURL()使用介绍
- 关于时间:UTC时间、GMT时间、本地时间、Unix时间戳
- 人生感悟-成熟
- ECMAScript 6 入门 ----Generator 函数
- 做一个动态链接库
- ajaxFileUpload+struts2实现异步上传文件
- 并发 并行 同步 异步 多线程的区别
- iOS 导航栏设置
- MySQL优化--索引
- CSS专题之动画
- OC学习 第五章 NSString和NSMutablestring的一些常用方法
- 霞雲
- iOS客户端的微信支付接入