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\n",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:\curllib\lib\libcurl.a C:\curllib\lib\libcurldll.a C:\curllib\lib\libwldap32.a C:\curllib\lib\libws2_32.a 然后回到工程頁面,點擊Build即可

今天為了編譯和使用libcurl庫折騰了一下午,記下來供需要的人參考,需要注意的是,本文中編譯的是不帶ssl和zlib支持的libcurl,如果需要編譯支持ssl和zlib的curl,還需要先編譯openssl,zlib和libssh,編譯zlib比較簡單,直接使用源碼自帶的makefile文件即可,編譯openssl需要安裝MSYS和Perl,還需要修改一些代碼,libssh的編譯依賴openssl,網上都可以找到方法,也可以看源碼的README文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM