下面用乙個簡單的例子說明這個過程,共有三個檔案:hello.c、dll.h和dll.c。
hello.c 檔案內容如下
#include
#include "dll.h"
int main()
其中,hello()函式是動態連線庫提供的函式。
dll.h 檔案內容如下
#ifdef build_dll /* dll export */
#define export __declspec(dllexport)
#else /* exe import */
#define export __declspec(dllimport)
#endif
export void hello(void);
dll.c 檔案內容如下
#include "dll.h"
export void hello(void)
三個檔案的內容都很簡單,無須解釋。
編譯連線程式
1、編譯hello.c
gcc -c hello.c
2、編譯dll.c
gcc -c -dbuild_dll dll.c
注意要使用要使用-dbuild_dll來設定巨集build_dll
3、建立dll
gcc -shared -o message.dll dll.o -wl,--out-implib,libmessage.a
這一步要詳細說明一下
-shared引數用來建立共享庫,在windows中為dll
-wl 等待下一條資訊進行連線
--out-implib是給連線程式ld使用的,用於建立要連線dll需要的import library
4、建立可執行檔案
gcc -o hello.exe hello.o -l./ -lmessage
-l 指定連線庫路徑
-lmessage (or -l message) 指定dll的import library
好了,編譯連線完成,執行程式
c:/>hello
hello!
利用GCC編譯obj c
bash 3.2 cat test first.m import int main int argc,char argv makefile target name test first auto src file join target name m auto obj file join targe...
Gcc編譯出錯處理 openssl 依賴問題
出錯資訊 error dereferencing pointer to incomplete type rsa 原因 由於預設使用了openssl 1.1.x 版本,導致的api不一致引起 解決 1,直接安裝openssl1.0版本,debian 系 apt get install libssl1....
標頭檔案 gcc編譯
1 標頭檔案的包含方式 include 預設是從 usr include 目錄下搜尋檔案 include stdio.h include stdio.h 先在當前目錄下搜尋檔案,如果沒有,再去 usr include 下找 2 c語言的編譯步驟 預處理 預編譯 處理 開頭的內容,進行替換 執行巨集替...