zoukankan      html  css  js  c++  java
  • mingw打dll ,lib包命令和调用

    1,下面的命令行将这个代码编译成 dll。

    gcc mydll.c -shared -o mydll.dll -Wl,--out-implib,mydll.lib

    其中 -shared 告诉gcc dlltest.c 文件需要编译成动态链接库。-Wl 表示后面的内容是ld 的参数,需要传递给 ld。 --out-implib,dlltest.lib 表示让ld 生成一个名为 dlltest.lib 的导入库。

    如果还需要 .def 文件,则上面的命令行可以写为:

    gcc mydll.c -shared -o mydll.dll -Wl,--output-def,mydll.def,--out-implib,mydll.a

     动态dll库调用

    gcc -m32  -o Test  Test.c  mydll.dll

    Test.c

    #include"mydll.h"
    #include"stdio.h"
    #include<stdlib.h>
    int main(){
        printf("%d
    ",add_range(100,100));
        system("pause");
    }

    下面把我找到的一些信息也记录一下:

    gcc 选项 -Wl:用于给链接器传递参数,

                    -soname:指定动态库的soname (Short for object name)

                    -output-def = <...> 产生与导出符号相关的def文件

                    -out-implib = <*.a> 产生用于提供__img_符号的 .a导入库,即*.a文件

    def文件可以使用MinGW 附带的工具pexports生成,输入为dll文件,也可以使用VC附带的工具dumpbin 生成。

    MinGW 附带的dlltool 工具可以将def 文件转化成 *.a文件。

    2,vs静态 lib库调用

    #include "..lib.h"
    #pragma comment(lib,"..\debug\libTest.lib")

    3,在MInGW环境下编译和使用libcurl静态库

    libcurl 7.21以后的版本在Windows下的编译比较简单,自带了MinGW和VC环境的Makefile文件,首先去Curl官网下载源代码:http://curl.haxx.se/download.html,任选一个下载即可,推荐这个: curl-7.21.2.tar.gz,下载完成后解压开,打开命令行进入curl源码目录,(在此之前请先设置好MinGW的环境变量): cd curl-7.21.2 编译libcurl库文件: cd lib make -f Makefile.m32 等待编译完成即可 编译curl可执行文件: cd ../src make -f Makefile.m32 一会儿就编译完成了

    编译完成后,我们需要复制include头文件和库文件到一个目录供程序开发用

    1. 新建curllib目录

    2. 新建curllib/include目录,将源代码include目录里的curl文件夹复制到curllib/include目录,这些是使用libcurl需要的头文件 3. 新建curllib/lib目录,将源代码lib目录里编译好的库文件libcurl.a,libcurldll.a,libcurl.dll复制到curllib目录 4. 将MinGW安装目录下lib文件夹里的libwldap32.a和libws2_32.a复制到curllib/lib目录

    至此,curllib就是我们开发中要使用到的libcurl的全部文件,下面新建一个测试程序,假设文件名为curltest.c,代码如下:

    #include <stdio.h>
    #include <curl/curl.h>
    int main(void){
        CURL *curl;
        CURLcode res;
        curl = curl_easy_init();
        if(curl) 
            {curl_easy_setopt(curl, CURLOPT_URL, "www.baidu.com");
        res = curl_easy_perform(curl);
        /* always cleanup */
        curl_easy_cleanup(curl);
    }
    return 0;
    }

    方法一、命令行编译使用licurl的程序

    假设测试代码curltest.c位于e:/project 假设curllib文件夹的位置为c:/curllib

     

    1,命令行运行下列命令编译这个测试程序:

    cd e:/project

     

    gcc -I. -Ic:/curllib/include -g -O2 -DCURL_STATICLIB -c curltest.c

     

    2,gcc -s -o curltest.exe curltest.o -Lc:/curllib/lib -lcurl -lwldap32 -lws2_32

     

    这时可以看到curltest.c目录下生成了一个curltest.exe文件

    接着在命令行输入: curltest.exe 如果看到命令行窗口输出一些HTML代码,就表示编译成功

     

    方法二、Code::Blocks中使用libcurl静态库

    1. 新建工程,在工程里添加代码同上的curltest.c文件

     

    2. 将上面curllib/include目录下的curl文件夹复制到MinGW安装目录的include目录

     

    3. 工程名上右键打开Build Options选项,在Compiler Settings选项卡下的#defines里面输入CURL_STATICLIB,(这表示使用静态库) 4. 在Linker Settings选项卡下面的link libraries里添加上面curllib/lib目录里的四个文件: C:curllibliblibcurl.a C:curllibliblibcurldll.a C:curllibliblibwldap32.a C:curllibliblibws2_32.a 然后回到工程页面,点击Build即可

    今天为了编译和使用libcurl库折腾了一下午,记下来供需要的人参考,需要注意的是,本文中编译的是不带ssl和zlib支持的libcurl,如果需要编译支持ssl和zlib的curl,还需要先编译openssl,zlib和libssh,编译zlib比较简单,直接使用源码自带的makefile文件即可,编译openssl需要安装MSYS和Perl,还需要修改一些代码,libssh的编译依赖openssl,网上都可以找到方法,也可以看源码的README文件。

     

  • 相关阅读:
    ubuntu20.04.2设置配置静态ip方法
    如何在windows10上面运行HyperLedger Fabric1.4
    powershell中临时修改环境变量
    openssl查看pem格式证书细节
    git clone的时候遭遇fatal: early EOF fatal: index-pack failed解决办法
    修改sourcetree的推送账户
    ubuntu上kafka的配置与使用(二)--kafka和zookeeper集群的配置(kafka自带的zookeeper)
    ubuntu上kafka的配置与使用(一)--单机kafka的配置
    李航老师的《统计学习方法》第二章算法的matlab程序
    第8题——计算糖果
  • 原文地址:https://www.cnblogs.com/blueberry006/p/7767888.html
Copyright © 2011-2022 走看看