zoukankan      html  css  js  c++  java
  • Eclipse下生成.dll动态库及.a静态库使用 for Windows [z]

    以后的主要工作就是做库了,将我们的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个就会把一块拷贝,否则需要下步操作.
        //*(pCh + 2) = '';
        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了!! 汗....

  • 相关阅读:
    龇牙咧嘴过中秋
    构建XML的架构文件XSD
    见龙卸甲
    陈忠和哭了
    山本五十六
    XML文件用做资源
    洗牙洗鼻洗屁股
    MS SQL导入平面文件源
    残奥会开幕式
    转身十年
  • 原文地址:https://www.cnblogs.com/jjj250/p/3270549.html
Copyright © 2011-2022 走看看