前言:本實驗制作一個動态鍊接庫并使用,需要知道的是在linux系統下動态鍊接庫的後綴名是.so ,window系統中的動态鍊接庫後綴名為.dll
1、本次實現的代碼結構如下:demo.c :實現庫函數将兩個整數相加
demo.h:函數原型放在.h文件裡提供給第三方調用
main.c 模拟第三方用戶,調用靜态庫
2、将demo.c制作成動态庫.so
demo.c以及demo.h内容如下:
// demo.c
#include <stdio.h>
/*
自己實現的兩個整數相加的函數,以靜态庫的形式提供,
調用者無需關注具體怎麼實現,隻知道調用的函數名,
以及參數
*/
int my_add(int x,int y)
{
printf("in demo.c >_<.\r\n");
return x y;
}
// demo.h
#ifndef __DEMO_H__
#define __DEMO_H__
int my_add(int x,int y);
#endif
在ubuntu環境下使用如下命令生成動态庫libdemo.so
-fpic是位置無關碼,-shared是按照共享庫的方式來鍊接
3、使用動态庫庫在main.c裡調用動态庫的my_add函數,代碼如下:
#include <stdio.h>
#include "demo.h"
int main(void)
{
int sum = 0;
sum = my_add(1,2);
printf("sum = %d\r\n",sum);
return 0;
}
編譯以及連接動态庫的命令如下:
使用-ldemo就是告訴編譯器在libdemo.so裡找使用的函數。-L. 是指定連接器在那個目錄下尋找庫文件,句點.表示當前目錄。但是出現運行出錯。
由于可執行文件在運行的時候需要查找使用的動态庫一般是在/usr/lib目錄下,我們隻需拷貝libdemo.so到/usr/lib即可。
另外可以通過設置環境變量LD_LIBRARY_PATH,将libdemo.so所在目錄添加到環境變量即可
獲取相關代碼方式
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!