「技術篇」Linux下,C/C++靜態庫和動態庫的編譯配置以及如何使用
閱讀本文大概需要5分鐘
閱讀本文大概需要5分鐘
昨天有人我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的靜態庫和動態庫相關問題,看了下自己的知識庫,發現了當初學習過程中的一些筆記,所以今天拿出來,和大家分享下。
關於靜態庫和動態庫不做過多的介紹,這篇文章重點是介紹如何將自己的代碼編譯成靜態庫和動態庫以及如何使用。
測試代碼
為了便於演示,這裡展示一個比較簡單的代碼:
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文件
由.o文件生成靜態庫
閱讀本文大概需要5分鐘
昨天有人我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文件
由.o文件生成靜態庫
使用
在程序中使用靜態庫
閱讀本文大概需要5分鐘
昨天有人我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文件
由.o文件生成靜態庫
使用
在程序中使用靜態庫
閱讀本文大概需要5分鐘
昨天有人我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文件
由.o文件生成靜態庫
使用
在程序中使用靜態庫
可以看到,程序正常輸出了,和我們設想的一致。
動態編譯
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的靜態庫和動態庫相關問題,看了下自己的知識庫,發現了當初學習過程中的一些筆記,所以今天拿出來,和大家分享下。
關於靜態庫和動態庫不做過多的介紹,這篇文章重點是介紹如何將自己的代碼編譯成靜態庫和動態庫以及如何使用。
測試代碼
為了便於演示,這裡展示一個比較簡單的代碼:
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文件
由.o文件生成靜態庫
使用
在程序中使用靜態庫
可以看到,程序正常輸出了,和我們設想的一致。
動態編譯
1.將message.c編譯成.o文件
gcc –c - fpic message.c
使用了gcc的編譯選項-fpic,即位置無關選項(position-independent code)
2.由.o文件創建動態庫
gcc –shared –o libmessage.so message.o
3.在程序中使用動態庫
程序運行時報錯,原因是找不到動態庫文件libmessage.so。程序在運行時會在/usr/lib/等目錄下查找所需要的動態庫文件。若是找到,則載入動態庫,否則則提示上述錯誤而終止運行。
解決辦法:
將文件libmessage.so複製到目錄/usr./lib中即可
閱讀本文大概需要5分鐘
昨天有人我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文件
由.o文件生成靜態庫
使用
在程序中使用靜態庫
可以看到,程序正常輸出了,和我們設想的一致。
動態編譯
1.將message.c編譯成.o文件
gcc –c - fpic message.c
使用了gcc的編譯選項-fpic,即位置無關選項(position-independent code)
2.由.o文件創建動態庫
gcc –shared –o libmessage.so message.o
3.在程序中使用動態庫
程序運行時報錯,原因是找不到動態庫文件libmessage.so。程序在運行時會在/usr/lib/等目錄下查找所需要的動態庫文件。若是找到,則載入動態庫,否則則提示上述錯誤而終止運行。
解決辦法:
將文件libmessage.so複製到目錄/usr./lib中即可
執行次序
靜態庫和動態庫的執行次序:
當靜態庫和動態庫同名時,gcc命令會使用哪個庫文件呢?
閱讀本文大概需要5分鐘
昨天有人我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文件
由.o文件生成靜態庫
使用
在程序中使用靜態庫
可以看到,程序正常輸出了,和我們設想的一致。
動態編譯
1.將message.c編譯成.o文件
gcc –c - fpic message.c
使用了gcc的編譯選項-fpic,即位置無關選項(position-independent code)
2.由.o文件創建動態庫
gcc –shared –o libmessage.so message.o
3.在程序中使用動態庫
程序運行時報錯,原因是找不到動態庫文件libmessage.so。程序在運行時會在/usr/lib/等目錄下查找所需要的動態庫文件。若是找到,則載入動態庫,否則則提示上述錯誤而終止運行。
解決辦法:
將文件libmessage.so複製到目錄/usr./lib中即可
執行次序
靜態庫和動態庫的執行次序:
當靜態庫和動態庫同名時,gcc命令會使用哪個庫文件呢?
從程序message運行的錯誤中和很容易知道,當linux靜態庫好linux動態庫同名時,gcc命令將優先級使用動態庫
鵝卵石說
頭條號【鵝卵石愛編程】分享Linux,Windows下C/C++,編程相關的技術,堅持每天進行技術支出,希望大家能夠喜歡。
你的關注點贊就是對我最大的支持,感謝各位粉絲一個多月來的支持。
推薦閱讀
推薦我最近的文章