以后的主要工作就是做库了,将我们的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了!! 汗....