[C/C++] Building DLL with MinGW

  • Buding DLL with MinGW
  • 在windows底下要建立dll檔時通常會使用Visual C++,這裡提供一個使用MinGW的方式來產生dll。

    ==================================

    /* mydll.c */

    使用以下兩個指令將mydll.c編譯成dll檔

    • gcc -c mydll.c
    • gcc -shared -o mydll.dll mydll.o

    ==================================

    /* test.c */

    把編譯好的dll檔連結到我們要測試的程式(test.c)

    • gcc -o test test.c -L./ -lmydll

      執行範例畫面如下:

      上面是一個比較簡便的方式,不只是MinGW可用,GCC也可以透過上述的程式馬來產生library,以下的方法適用於Win32環境下的dll,有需求的人可以不訪學起來。

      ==================================

      /* mydll.h */

      透過__declspec來決定我們有哪些functions或variables要被列為可供動態連結調用

      /* mydll.c*/

      程式的功能很簡單,要注意的是printMsg回傳型態前面並沒有加上EXPORT,如此一來,你就無法透過使用mydll.dll來調用printMsg,只有mydll.dll本身的函式可以使用printMsg函式。

      我們可以透過下面兩個指令來編譯這個dll。

      • gcc -c -D__MYDLL_H__ mydll.c
      • gcc -shared -o mydll.dll mydll.o

      產生完dll之後我們還要測試是否能夠正常運作。

      =========================================

      /* test.c */

      可以透過下面的指令編譯:

      • gcc -o test test.c -L./ -lmydll

      如果將成是碼第5行的註解拿掉將會編譯錯誤,原因如同上面所提的。

      範例輸出畫面如下:

      =================================

      上面的都還只是靜態的連結,動態的連結方式如下:

      /* fib.h */

      /* fib.c */

      /* test.c *

      編譯的過程並沒有什麼差別:

      • gcc -c -D__FIBDLL_H__ fib.c
      • gcc -shared -o fib.dll fib.o
      • gcc -o test test.c

      只是變成dll由test.c裡面呼叫使用。

    No comments:

    Post a Comment

    Orange - data analysis tool

    Installation pip install orange3 Run orange python -m Orange.canvas