靜態庫與動態庫

2021-06-20 08:14:44 字數 1215 閱讀 9059

linux下靜態庫(.a)的例子:

mylib.h:位於include資料夾下:

#ifndef mylib_h_

#define mylib_h_

int add(int a, int b);

#endif

mylib.cpp:位於lib資料夾中

#include "mylib.h"

int add(int a, int b)

現在要編譯生成libmylib.a靜態庫:

1, 先生成mylib.o,由於標頭檔案和原始檔不在同一目錄下:

桌面/denvelop/lib$g++ -c -i /home/xq/桌面/denvelop/include/ mylib.cpp

2, 生成靜態庫:

桌面/denvelop/lib$g++ -c -i /home/xq/桌面/denvelop/include/ mylib.cpp

這裡需要生成內容表:這一步不是必需的, 但做了也無妨

桌面/denvelop/lib$ranlib libmylib.a

main.cpp:

#include "mylib.h"

#include int main()

main.cpp

#include extern"c" _declspec(dllimport) int add(int a, int b);

int main()

c#main.cs:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.runtime.interopservices;

}}

c# 在引用時c++動態庫時, 只需要注意將動態庫檔案放在與執行程式相同的目錄下就可以了,

然後是用c#的 dllimport特性來引用, 注意該方法必需以extern 和static 修飾. 因為c#是完全物件導向的語言, 方法必需在類中.



靜態庫與動態庫

庫本質上是一種可執行的二進位制 可以被作業系統載入 linux和windows的庫是不相容的 庫可以分為靜態塊和動態庫,二者的不同點在於 被載入的時刻不同。靜態庫 在程式編譯時會被連線到目標 中,程式執行時不再需要改靜態庫,體積較大,一般應用與移植過程中在宿主機上編譯的 靜態庫檔名的命名規範是以li...

靜態庫與動態庫

1.靜態庫 工程在呼叫靜態庫時,複製靜態庫,源 加長,不節省程式空間。字尾名.a 優點 程式設計後不需要再依賴庫 以空間換時間 建立靜態庫 gcc c 原始檔.c ar rcs rcu 靜態庫名 目標檔案1 目標檔案2 rc 靜態庫不存在,就建立該庫檔案 s 更新靜態庫 使用 gcc o file ...

靜態庫與動態庫

編譯系統在編譯的過程中,將所有相關的目標模組打包成乙個單獨的檔案,稱為靜態庫 static library 它可以用做鏈結器的輸入。當鏈結器構造乙個輸出的可執行檔案時,它只拷貝靜態庫里被應用程式引用的目標模組。在unix系統中,靜態庫以一種稱為存檔 archive 的特殊檔案格式存放在磁碟中。存檔檔...