以后的主要工作就是做库了,将我们的C或者C++写的接口做成库,给客户端使用,因此有必要知道库的使用和制作方法。主要是在Eclipse下搞了搞,公司用的是Carbide,也差不多。库做好了,用SVN已提交就搞定了,工作不是很重。学习永无止境啊,以前干了两三个月的.Net,数据库,还是习惯现在,基础还是比较重要的..
新建工程Eclipse->File->New->C++ project(或者C project)->Shared Library(或者Static Library),然后新建.h和.c文件,分别如下:
/*
* freeptr.h
*
* Created on: 2012-8-19
* Author: Administrator
*/
#ifndef FREEPTR_H_
#define FREEPTR_H_
#ifdef __cpluscplus
extern "C"
{
#endif
void freeCharPtr( char ** ch, ...);
#ifdef __cpluscplus
}
#endif
#endif /* FREEPTR_H_ */
/*
* freeptr.cpp
*
* Created on: 2012-8-19
* Author: Administrator
*/
#include <stdlib.h>
#include <stdarg.h>
#include "freeptr.h"
void freeCharPtr( char ** ch, ...) s//使用时记得在最后添加NULL参数
{
va_list ap;
char ** p;
va_start(ap, ch);
free(*ch);
*ch = NULL;
while (p = va_arg(ap, char ** ))
{
free(*p);
*p = NULL;
}
}
然后Ctrl+b就会生成.dll - 动态库 或者.a - 静态库 文件:
其实挺简单的,这样我们就可以随时做自己的库,然后使用如下:
文件都准备好后,选中工程鼠标右击->C/C++ Build->Settings->Tools Settings下MinGw C++ Linker(看具体的Libraries在哪)->Libraries,然后在Libraries (-l)下添加库的名字,本例子是libfreeptrlib,在Library search path (-L)下添加"${workspace_loc:/库路径}",为了方便我直接将库拷贝到了自己工程新建的lib/目录下,因此库搜索路径为"${workspace_loc:/libtest2/lib}",搞定可以使用了:
//============================================================================
// Name : libtest2. cpp
// Author : hl
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <stdlib.h>
#include <memory.h>
#include "../include/freeptr.h"
using namespace std;
int main() {
char * pCh = ( char *)malloc (4 * sizeof(char ));
memcpy(pCh, "sb ", 3); //拷贝3个就会把\0一块拷贝,否则需要下步操作.
//*(pCh + 2) = '\0';
cout << pCh << endl;
cout << 2 << endl;
//freeCharPtr(&pCh, NULL); /*freeptrlib.dll库的释放函数.
it's ok?有问题,注释掉就看不到打印结果 了,估计是函数有问题。*/
return 0;
}
编译运行,oK了。
网上资料说运行时需要:
但我的libtest2的时候,没加,运行也可以!我想直接已经添加过搜索路径,应该编译器可以find,so..
至于静态库的使用:
编译生成的.a文件可以拷贝的工程目录新建的lib下,然后按照和上班的方法类似进行:
选中工程鼠标右击->C/C++ Build->Settings->Tools Settings下MinGw C++ Linker(看具体的Libraries在哪)->Libraries,然后在Libraries (-l)下添加库的名字,本例子是libfreeptrlib.a,但是要注意我们再添加静态库名字的时候只需要添加freeptrlib就可以了,因为编译器会自动给我们在首尾分别添加lib和.a
在Library search path (-L)下添加"${workspace_loc:/库路径}",为了方便我直接将库拷贝到了自己工程新建的lib/目录下,因此库搜索路径为"${workspace_loc:/libtest3/lib}",搞定可以使用了。
然后就可以编译和使用了,包含头文件,然后编译运行,ok了!! 汗....
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现