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

Eclipse下生成.dll动态库及.a静态库使用 for Windows [z]的更多相关文章

  1. Golang调用windows下的dll动态库中的函数

    Golang调用windows下的dll动态库中的函数 使用syscall调用. package main import ( "fmt" "syscall" & ...

  2. Golang调用windows下的dll动态库中的函数 Golang 编译成 DLL 文件

    Golang调用windows下的dll动态库中的函数 package main import ( "fmt" "syscall" "time&quo ...

  3. eclipse 下生成jar包

    eclipse 下生成jar包 第一:普通类导出jar包,我说的普通类就是指此类包含main方法,并且没有用到别的jar包. 1.在eclipse中选择你要导出的类或者package,右击,选择Exp ...

  4. Eclipse下生成/编辑Java类图或时序图(UML)[转载]

    一 引用文章 1.[eclipse下生成Java类图和时序图,生成UML图(更完整版)](https://blog.csdn.net/guomainet309/article/details/5302 ...

  5. Qt动态库静态库的创建、使用、多级库依赖、动态库改成静态库等详细说明

    本文描述的是windows系统下,通过qtcreator在pro文件中添加动态库与静态库的方法: 1.添加动态库(直接添加动态库文件.dll,非子项目) 通过qtcreator创建动态库的方法就不在此 ...

  6. iOS:Xcode7下创建 .a静态库 和 .framework静态库

    Xcode7 中创建静态库:.a 和 .framework 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开 ...

  7. iOS XCode7制作.Framework动态库和.a静态库的总结

    一.开发SDK时的支持情况: OC语言制作动态库时,支持iOS8+:OC语言制作静态库,支持iOS7+. Swift语言制作动态库时,支持iOS8+;Swift不支持静态库. 对于SDK来说,支持情况 ...

  8. centos 目录结构 快捷键 ls命令,alias别名,so:动态库 a:静态库,环境变量PATH,Ctrl+z 暂停命令,Ctrl+a 光标到行首,Ctrl+e 光标到行尾,Ctrl+u 删除光标前所有字符 Ctrl+r 搜索命 hash命令 Ctrl+左箭头/右箭头 cd命令 第三节课

    centos 目录结构 快捷键 ls命令,alias别名,so:动态库 a:静态库,环境变量PATH,Ctrl+z 暂停命令,Ctrl+a 光标到行首,Ctrl+e 光标到行尾,Ctrl+u 删除光标 ...

  9. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

随机推荐

  1. tar格式 方法安装MySQL后,初次登录出现 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement

    参考: https://www.cnblogs.com/kerrycode/p/4368312.html http://blog.csdn.net/u014520039/article/details ...

  2. 神之编辑器emacs

    vim被称之为编辑器之神,而emacs被成为神之编辑器. 可以当编辑器,也可以当做编译器. 编辑好后保存 输入 M-x shell 可以编译文件 g++ test.cpp -o test ./test ...

  3. BZOJ4408: [Fjoi 2016]神秘数【主席树好题】

    Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = ...

  4. 前后端分离之让前端开发脱离接口束缚(mock)

    情景:     领导:小吴啊,最近在忙什么啊?     前吴:(心想:我擦勒,难道划水被领导发现了?也不能怪我啊,后台的哥们接口还没给呢,但要是实话实说不就对不起后台哥们了吗?)           ...

  5. soql取第一件数据

    User u = [select ID,Name from User Limit 1];

  6. java实现MsOffice文档向pdf文档转化

    本篇文档实现功能,将word和ppt文档的文件转化成pdf格式的文档 应用到jacob 第一步:下载压缩包 (1)jacob官网下载jacob压缩包 (2)网址:http://sourceforge. ...

  7. 为什么 Windows 10 无论怎么设置一分钟后就自动关屏幕?

    为什么 Windows 10 无论怎么设置一分钟后就自动关屏幕? 在设置中设置了很多方法,但不管怎么设置就是不行,不到一分钟一定关屏幕. 开始以为是能源之星引起,查了相关资料说不是,那个能源之星标志只 ...

  8. Pacemaker+Corosync搭建PostgreSQL集群

    https://my.oschina.net/aven92/blog/518928 · PostgreSQL中国社区: http://postgres.cn/index.php/home · Post ...

  9. Git自动换行符

    http://blog.csdn.net/jonathan321/article/details/51988242?locationNum=2 不同的操作系统有不同的换行符格式,跨平台协作时需要考虑版 ...

  10. ZedGraph右键菜单怎样禁止它弹出(转)

    private void ZGC_ContextMenuBuilder( ZedGraphControl sender,                     ContextMenuStrip me ...