「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

閱讀本文大概需要5分鐘

閱讀本文大概需要5分鐘

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

Linux之父

昨天有人我linux的靜態庫和動態庫相關問題,看了下自己的知識庫,發現了當初學習過程中的一些筆記,所以今天拿出來,和大家分享下。

關於靜態庫和動態庫不做過多的介紹,這篇文章重點是介紹如何將自己的代碼編譯成靜態庫和動態庫以及如何使用。

測試代碼

為了便於演示,這裡展示一個比較簡單的代碼:

message.c

#include "stdio.h"

void goodbye_world(void)

{

printf("Goodbye,world!\n");

}

main.c

#include "stdio.h"

void goodbye_world(void);

int main(int argc,char **argv)

{

goodbye_world();

return 0;

}

如何,代碼夠簡單吧,程序員應該都能看懂。下面開始所說如何進行編譯。

編譯

靜態編譯

編寫messag.c文件。首先編譯成.o文件

閱讀本文大概需要5分鐘

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

Linux之父

昨天有人我linux的靜態庫和動態庫相關問題,看了下自己的知識庫,發現了當初學習過程中的一些筆記,所以今天拿出來,和大家分享下。

關於靜態庫和動態庫不做過多的介紹,這篇文章重點是介紹如何將自己的代碼編譯成靜態庫和動態庫以及如何使用。

測試代碼

為了便於演示,這裡展示一個比較簡單的代碼:

message.c

#include "stdio.h"

void goodbye_world(void)

{

printf("Goodbye,world!\n");

}

main.c

#include "stdio.h"

void goodbye_world(void);

int main(int argc,char **argv)

{

goodbye_world();

return 0;

}

如何,代碼夠簡單吧,程序員應該都能看懂。下面開始所說如何進行編譯。

編譯

靜態編譯

編寫messag.c文件。首先編譯成.o文件

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

編譯.o文件

由.o文件生成靜態庫

閱讀本文大概需要5分鐘

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

Linux之父

昨天有人我linux的靜態庫和動態庫相關問題,看了下自己的知識庫,發現了當初學習過程中的一些筆記,所以今天拿出來,和大家分享下。

關於靜態庫和動態庫不做過多的介紹,這篇文章重點是介紹如何將自己的代碼編譯成靜態庫和動態庫以及如何使用。

測試代碼

為了便於演示,這裡展示一個比較簡單的代碼:

message.c

#include "stdio.h"

void goodbye_world(void)

{

printf("Goodbye,world!\n");

}

main.c

#include "stdio.h"

void goodbye_world(void);

int main(int argc,char **argv)

{

goodbye_world();

return 0;

}

如何,代碼夠簡單吧,程序員應該都能看懂。下面開始所說如何進行編譯。

編譯

靜態編譯

編寫messag.c文件。首先編譯成.o文件

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

編譯.o文件

由.o文件生成靜態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

生成的靜態庫

使用

在程序中使用靜態庫

閱讀本文大概需要5分鐘

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

Linux之父

昨天有人我linux的靜態庫和動態庫相關問題,看了下自己的知識庫,發現了當初學習過程中的一些筆記,所以今天拿出來,和大家分享下。

關於靜態庫和動態庫不做過多的介紹,這篇文章重點是介紹如何將自己的代碼編譯成靜態庫和動態庫以及如何使用。

測試代碼

為了便於演示,這裡展示一個比較簡單的代碼:

message.c

#include "stdio.h"

void goodbye_world(void)

{

printf("Goodbye,world!\n");

}

main.c

#include "stdio.h"

void goodbye_world(void);

int main(int argc,char **argv)

{

goodbye_world();

return 0;

}

如何,代碼夠簡單吧,程序員應該都能看懂。下面開始所說如何進行編譯。

編譯

靜態編譯

編寫messag.c文件。首先編譯成.o文件

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

編譯.o文件

由.o文件生成靜態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

生成的靜態庫

使用

在程序中使用靜態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

編譯時連接

閱讀本文大概需要5分鐘

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

Linux之父

昨天有人我linux的靜態庫和動態庫相關問題,看了下自己的知識庫,發現了當初學習過程中的一些筆記,所以今天拿出來,和大家分享下。

關於靜態庫和動態庫不做過多的介紹,這篇文章重點是介紹如何將自己的代碼編譯成靜態庫和動態庫以及如何使用。

測試代碼

為了便於演示,這裡展示一個比較簡單的代碼:

message.c

#include "stdio.h"

void goodbye_world(void)

{

printf("Goodbye,world!\n");

}

main.c

#include "stdio.h"

void goodbye_world(void);

int main(int argc,char **argv)

{

goodbye_world();

return 0;

}

如何,代碼夠簡單吧,程序員應該都能看懂。下面開始所說如何進行編譯。

編譯

靜態編譯

編寫messag.c文件。首先編譯成.o文件

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

編譯.o文件

由.o文件生成靜態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

生成的靜態庫

使用

在程序中使用靜態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

編譯時連接

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

運行程序

可以看到,程序正常輸出了,和我們設想的一致。

動態編譯

1.message.c編譯成.o文件

gcc –c - fpic message.c

使用了gcc的編譯選項-fpic,即位置無關選項(position-independent code)

2..o文件創建動態庫

gcc –shared –o libmessage.so message.o

3.在程序中使用動態庫

閱讀本文大概需要5分鐘

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

Linux之父

昨天有人我linux的靜態庫和動態庫相關問題,看了下自己的知識庫,發現了當初學習過程中的一些筆記,所以今天拿出來,和大家分享下。

關於靜態庫和動態庫不做過多的介紹,這篇文章重點是介紹如何將自己的代碼編譯成靜態庫和動態庫以及如何使用。

測試代碼

為了便於演示,這裡展示一個比較簡單的代碼:

message.c

#include "stdio.h"

void goodbye_world(void)

{

printf("Goodbye,world!\n");

}

main.c

#include "stdio.h"

void goodbye_world(void);

int main(int argc,char **argv)

{

goodbye_world();

return 0;

}

如何,代碼夠簡單吧,程序員應該都能看懂。下面開始所說如何進行編譯。

編譯

靜態編譯

編寫messag.c文件。首先編譯成.o文件

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

編譯.o文件

由.o文件生成靜態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

生成的靜態庫

使用

在程序中使用靜態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

編譯時連接

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

運行程序

可以看到,程序正常輸出了,和我們設想的一致。

動態編譯

1.message.c編譯成.o文件

gcc –c - fpic message.c

使用了gcc的編譯選項-fpic,即位置無關選項(position-independent code)

2..o文件創建動態庫

gcc –shared –o libmessage.so message.o

3.在程序中使用動態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

動態庫使用

程序運行時報錯,原因是找不到動態庫文件libmessage.so。程序在運行時會在/usr/lib/等目錄下查找所需要的動態庫文件。若是找到,則載入動態庫,否則則提示上述錯誤而終止運行。

解決辦法:

將文件libmessage.so複製到目錄/usr./lib中即可

閱讀本文大概需要5分鐘

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

Linux之父

昨天有人我linux的靜態庫和動態庫相關問題,看了下自己的知識庫,發現了當初學習過程中的一些筆記,所以今天拿出來,和大家分享下。

關於靜態庫和動態庫不做過多的介紹,這篇文章重點是介紹如何將自己的代碼編譯成靜態庫和動態庫以及如何使用。

測試代碼

為了便於演示,這裡展示一個比較簡單的代碼:

message.c

#include "stdio.h"

void goodbye_world(void)

{

printf("Goodbye,world!\n");

}

main.c

#include "stdio.h"

void goodbye_world(void);

int main(int argc,char **argv)

{

goodbye_world();

return 0;

}

如何,代碼夠簡單吧,程序員應該都能看懂。下面開始所說如何進行編譯。

編譯

靜態編譯

編寫messag.c文件。首先編譯成.o文件

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

編譯.o文件

由.o文件生成靜態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

生成的靜態庫

使用

在程序中使用靜態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

編譯時連接

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

運行程序

可以看到,程序正常輸出了,和我們設想的一致。

動態編譯

1.message.c編譯成.o文件

gcc –c - fpic message.c

使用了gcc的編譯選項-fpic,即位置無關選項(position-independent code)

2..o文件創建動態庫

gcc –shared –o libmessage.so message.o

3.在程序中使用動態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

動態庫使用

程序運行時報錯,原因是找不到動態庫文件libmessage.so。程序在運行時會在/usr/lib/等目錄下查找所需要的動態庫文件。若是找到,則載入動態庫,否則則提示上述錯誤而終止運行。

解決辦法:

將文件libmessage.so複製到目錄/usr./lib中即可

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

使用

執行次序

靜態庫和動態庫的執行次序:

當靜態庫和動態庫同名時,gcc命令會使用哪個庫文件呢?

閱讀本文大概需要5分鐘

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

Linux之父

昨天有人我linux的靜態庫和動態庫相關問題,看了下自己的知識庫,發現了當初學習過程中的一些筆記,所以今天拿出來,和大家分享下。

關於靜態庫和動態庫不做過多的介紹,這篇文章重點是介紹如何將自己的代碼編譯成靜態庫和動態庫以及如何使用。

測試代碼

為了便於演示,這裡展示一個比較簡單的代碼:

message.c

#include "stdio.h"

void goodbye_world(void)

{

printf("Goodbye,world!\n");

}

main.c

#include "stdio.h"

void goodbye_world(void);

int main(int argc,char **argv)

{

goodbye_world();

return 0;

}

如何,代碼夠簡單吧,程序員應該都能看懂。下面開始所說如何進行編譯。

編譯

靜態編譯

編寫messag.c文件。首先編譯成.o文件

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

編譯.o文件

由.o文件生成靜態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

生成的靜態庫

使用

在程序中使用靜態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

編譯時連接

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

運行程序

可以看到,程序正常輸出了,和我們設想的一致。

動態編譯

1.message.c編譯成.o文件

gcc –c - fpic message.c

使用了gcc的編譯選項-fpic,即位置無關選項(position-independent code)

2..o文件創建動態庫

gcc –shared –o libmessage.so message.o

3.在程序中使用動態庫

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

動態庫使用

程序運行時報錯,原因是找不到動態庫文件libmessage.so。程序在運行時會在/usr/lib/等目錄下查找所需要的動態庫文件。若是找到,則載入動態庫,否則則提示上述錯誤而終止運行。

解決辦法:

將文件libmessage.so複製到目錄/usr./lib中即可

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

使用

執行次序

靜態庫和動態庫的執行次序:

當靜態庫和動態庫同名時,gcc命令會使用哪個庫文件呢?

「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用

檢查

從程序message運行的錯誤中和很容易知道,當linux靜態庫好linux動態庫同名時,gcc命令將優先級使用動態庫

鵝卵石說

頭條號【鵝卵石愛編程】分享Linux,Windows下C/C++,編程相關的技術,堅持每天進行技術支出,希望大家能夠喜歡。

你的關注點贊就是對我最大的支持,感謝各位粉絲一個多月來的支持。

推薦閱讀

推薦我最近的文章

  1. 使用Qt快速開發可視化軟件

  2. C++回繪製的波形進度條

  3. Qt/C++實現老照片效果

相關推薦

推薦中...