linux 下的C动态库编写
来源:互联网 发布:去痘印面膜 知乎 编辑:程序博客网 时间:2024/05/16 01:28
动态库的本质是一个.c 文件 ,里面封装了一部分相关的函数,经过已编译指令生成动态库;
base.c 文件内容:
#include <stdio.h>#include <stdlib.h>#include <string.h>void ch_to_base64(char src[]){char Base[65]={};strcpy(Base,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");char dest[64]={};int s_len=strlen(src);int remainder = s_len%3;int times = (s_len-remainder)/3;int pos = 0;int i = 0,j = 0;int parr[5];while(times){unsigned int tmp1 = (unsigned int) src[pos++];unsigned int tmp2 = (unsigned int) src[pos++];unsigned int tmp3 = (unsigned int) src[pos++];parr[0] = tmp1>>2;parr[1] = ((tmp1-(tmp1>>2<<2))<<4) + (tmp2>>4);parr[2] = ((tmp2-(tmp2>>4<<4))<<2) +(tmp3>>6);parr[3] = tmp3-(tmp3>>6<<6);for(i,j=0;j<4;i++,j++){dest[i] = Base[parr[j]];}times--;}if(remainder == 1){unsigned int re1 = (unsigned int)src[pos];if((re1&3) == 0) {parr[0] = re1>>2;dest[i++]=Base[parr[0]];dest[i++]=Base[0];dest[i++]='=';dest[i++]='=';}else{parr[0] = re1>>2;parr[1] = (re1&3)<<4;dest[i++]=Base[parr[0]];dest[i++]=Base[parr[1]];dest[i++]='=';dest[i++]='=';}}if(remainder == 2){unsigned int re1 = (unsigned int)src[pos++];unsigned int re2 = (unsigned int)src[pos];if((re2&15) == 0){parr[0] = re1>>2;parr[1] = ((re1 - (re1>>2<<2))<<4) + (re2>>4);dest[i++]=Base[parr[0]];dest[i++]=Base[parr[1]];dest[i++]=Base[0];dest[i++]='=';}else{parr[0] = re1>>2;parr[1] = ((re1 - (re1>>2<<2))<<4) + (re2>>4);parr[2] = (re2-(re2>>4<<4))<<2 ;dest[i++] = Base[parr[0]];dest[i++] = Base[parr[1]];dest[i++] = Base[parr[2]];dest[i++]='=';}}strcpy(src,dest);}
main.c 代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc,char **argv){if(argc !=2) {printf("error: param num is wrong!\n");return -1;}ch_to_base64(argv[1]);printf("buf = %s\n",argv[1]);}
动态库的命名规范:lib().so 括号的内容是动态库的名称,前面必须有lib,后面必须有.so
生成动态库:
gcc -fpic -shared base.c -olibbase64.so
将生成的动态库文件移动到系统库目录下
mv ./libbase64.so /lib64/
编译main.c
gcc main.c -o main -lbase64
运行main
./main pp
运行结果:
0 0
- linux 下的C动态库编写
- Linux下动态链接库的编写
- Linux下动态链接库的编写
- linux下C语言编程动态库so的编写及调用
- 在linux下编写动态链接库的步骤:
- Linux操作系统下动态库的编写与调用
- Linux操作系统下动态库的编写与调用
- Linux下编写动态链接库的简单过程
- 在linux下编写动态链接库的步骤
- Linux操作系统下动态库的编写与调用
- 在linux下编写动态链接库的步骤
- Linux下编写简单的动态链接库
- Linux操作系统下动态库的编写与调用
- 在linux下编写动态链接库的步骤
- Linux操作系统下动态库的编写与调用
- Linux下编写动态链接库的简单过程
- 在linux下编写动态链接库的步骤
- Linux下编写简单的动态链接库
- Java实现字节数组中截取指定长度数组元素
- Apache Lucene初探
- RasSetAutodialAddress
- OS中的自映射问题
- Android,提供视频开发测试地址(视频下载和视频播放所用)
- linux 下的C动态库编写
- android launcher开发(2)状态的保存与恢复
- Android 利用Gradle实现app的环境分离
- 集成学习的方法及功能
- debug tensorflow / 使用gdb调试tensorflow底层C++代码
- POJ 4049 Chess 极大极小搜索 -
- Eclipse中Cannot nest src folder解决方法
- CCF计算机软件能力认证试题练习-门禁系统(Java参考答案学习记录)
- Android蓝牙4.0 BLE开发坑总结