以后的主要工作就是做库了,将我们的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. CentOS6下源码安装mysql-5.6.25

    1.1.系统环境检查 1)检查系统版本 mkdir -p /server/tools/ cd /server/tools/ cat /etc/redhat-release 2)配置域名解析 vim / ...

  2. selenium-java,暂停功能

    暂停/开始应用程序 public class Common_method { public void kill_chromedriver(){ Runtime runtime=Runtime.getR ...

  3. 华为荣耀7i手动更改DNS,提高网页加载速度

    为什么在同样的Wi-Fi网络下,别人的手机可以秒开网页,但自己的手机却总会慢个半拍或是经常打不开,简直龟速.有时还会加载网页失败.我想大部分人都遇到过吧. 今天本人给大家介绍一种方法,可以加快打开网页 ...

  4. prefix sums--codility

    lesson 5: prefix sums 1. PassingCars 2. CountDiv 3. GenomicRangeQuery 4. MinAvgTwoSlice lesson 5: pr ...

  5. am335x_y蜂鸣器驱动

    修改文件:1.板级文件/arch/arm/mach-omap2/board-am335xevm.c static struct platform_device buzzer_device= { .na ...

  6. 02 - Unit011:Spring AOP

    Spring AOP 面向切面(儿)编程(横切编程) Spring 核心功能之一 Spring 利用AspectJ 实现. 底层是利用 反射的动态代理机制实现的 其好处: 在不改变原有功能情况下, 为 ...

  7. 添加APP右上角数字提醒标识

    mui.plusReady(function() { plus.nativeUI.closeWaiting(); mui.currentWebview.show(); //1.设置app右上角数字提醒 ...

  8. 转转转---ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法

    ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法   http://blog.csdn.net/yinshan33/article/detail ...

  9. Java 中的包装类

    Java 中的包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的,比如基本类型不能调用方法.功能简 ...

  10. Shell中单引号、双引号、反引号、反斜杠的区别

    1. 单引号 ( '' ) # grep Susan phonebook Susan Goldberg -- Susan Topple -- 如果我们想查找的是Susan Goldberg,不能直接使 ...