在linux下編譯用c編譯了乙個.a的靜態庫
在標頭檔案中包含了乙個結構體,和乙個函式
hello.c
#include void hello(const char *name)
hello.h
#ifndef hello_h
#define hello_h
void hello(const char *name);
struct _mc ;
typedef struct _mc mc_t;
#endif //hello_h
基於上述兩個檔案生成了乙個.a的靜態庫
main.c
#include "hello/inc/hello.h"
int main()
然後再main.c中呼叫的時候發現。
包含hello.h標頭檔案的時候,可以正常編譯並且生成可執行檔案。
不包含的時候就會報錯,說找不到mc_t這個結構體 的定義。
但是,我把 mc_t *pmc;刪掉,
main.c如下
int main()
編譯成功,且執行檔案也可以正常執行。
基於目前的情況來看,linux下生成的.a的靜態庫,不需要包含標頭檔案,就可以正常呼叫函式。如果需要呼叫內部設定的結構體,那麼就需要包含對應的標頭檔案了。
網上查了相關的內容
.a包是一種非開源**共享程式**的一種方式,對於接入方而言,看不到具體實現。通常隨.a包提供給接入方的還有資源包.bundle和提供api介面的.**件。
兩個和我有相識問題的帖子
不知道,有沒有辦法可以實現不包含標頭檔案就可以呼叫庫裡面定義的結構體。
Linux下靜態庫學習筆記
linux下靜態庫學習筆記 1.什麼是庫 1 1.庫是一種軟體元件技術,庫裡面封裝了資料和函式。庫的使用可以使程式模組化。linux通常把庫檔案存放在 lib或 usr lib目錄下。使用者建立的可以放在 usr local lib目錄下。win32平台下,靜態庫通常字尾為.lib,動態庫為.dll...
Linux學習(六) 靜態庫和動態庫
在windows中安裝好的軟體目錄下會看到一大堆以lib,dll字尾的檔案。而且有時候玩遊戲或者執行軟體的時候經常會遇到無法執行,因為缺少 dll,而這些就是軟體執行需要的庫,也就是原始碼編譯後的檔案。本質上說庫是一種可執行的二進位制檔案,可以直接被作業系統載入記憶體執行。庫有兩種 靜態庫和動態庫。...
linux程式設計學習5 編寫靜態庫
用乙個例子來闡述,列印函式print a的實現在print a.cpp檔案中,列印函式print b的實現在print b.cpp中,那麼要想把print a和print b函式編成靜態庫libprint.a,供自己或者其他使用者呼叫,應該按照以下步驟操作生成靜態庫libprint.a 1.將以下 ...