Linux下生成動態庫函式及呼叫簡述

2021-10-09 03:41:06 字數 2127 閱讀 8496

生成一般的動態庫函式

一般的庫函式指的是只是單純的編譯的**,比如自己利用標準標頭檔案編寫的c|cpp程式,for example:加減乘除函式

具體如下,以求和為例,找到乙個目錄開始操作,首先新建檔案

touch sum.cpp //儲存生成庫的原始碼

touch sum.h  //儲存生成庫的標頭檔案,標頭檔案內容如下

#ifndef __sum_h__

#define __sum_h__

int sum(int x,int y);

#endif

將sum.cpp和sum.h編譯成動態庫檔案,字尾為.so

法1.gcc -fpic -shared -o libsum.so sum.cpp

法2.gcc -c -fpic sum.cpp

gcc -shared -o libsum.so sum.o

touch test.cpp //儲存呼叫sum庫的主程式,內容如下

includeinclude"sum.h"

int main()

生成可執行檔案.out,預設為a.out,檔名可自由修改,下面用test.out為例

gcc test.cpp -o test.out -l. -lsum //生成test.out,其中-l***表示要鏈結lib***.so,***表示庫的原始碼檔名

ld_library_path=. ./test.out //執行即可,ld_library_path為可執行檔案指明庫路徑

生成包含庫的動態庫函式

這裡使用opencv為例,如果使用opencv的庫編寫乙個程式,正好這個程式又要生成動態庫,那麼除了要找到新生成的動態庫路徑還要考慮到opencv的庫路徑,這就和上面的情況有所不同了。

opencv安裝好之後,一般是編譯在/usr/local/include下,假設opencv編譯完成,那麼和上面一樣找到乙個路徑進行操作。

touch opencvtest.cpp  //生成庫的原始碼

touch opencvtest.h //生成庫的標頭檔案

touch opencv_test.cpp//主程式

g++ -shared -fpic -o libopencvtest.so opencvtest.cpp `pkg-config --libs --cflags opencv`//生成.so動態庫

g++ -o opencv_test.out opencv_test.cpp ./libopencvtest.so `pkg-config --libs --cflags opencv`//生成opencv_test.out檔案

./opencv_test.out//執行

與上述不同的是在g++最後加上了乙個`pkg-config --libs --cflags opencv`就是這個生成動態庫要連線上opencv的庫,否則生成.so時會報出找不到關於opencv的標頭檔案,既然是關於opencv的,那麼一定會涉及到讀取影象路徑,linux與windows的路徑格式還是有區別的,如果設定的都沒問題,程式還是不行,比如執行.out檔案時會報出如下錯誤,那就是路徑問題了。這個錯誤很容易出現在windows下的程式移植到linux下,因此,務必小心。

opencv error: bad argument (unrecognized or unsupported array type) in cvptr2d, file /home/pi/opencv-2.4.9/modules/core/src/array.cpp, line 1830

terminate called after throwing an instance of 'cv::exception'

what(): /home/pi/opencv-2.4.9/modules/core/src/array.cpp:1830: error: (-5) unrecognized or unsupported array type in function cvptr2d

下面簡單列出兩種不同系統下的路徑格式,以絕對路徑為例

windows:c:\\****\\*****\\****,上下級資料夾用\\隔開

linux:/usr/****/****/***,上下級資料夾用/隔開

Linux下生成動態庫和靜態庫

最近搞linux的程式設計 寫寫這個 綜合網上例子和本人使用方法。編輯得到舉例的程式 hello.h hello.c和main.c hello.h 見程式1 為該函式庫的標頭檔案。hello.c 見程式2 是函式庫的源程式,其中包含公用函式hello,該函式將在螢幕上輸出 hello main.c ...

linux 下生成動態庫 so並引用

動態庫的引入及減少了主 檔案的大小,同時生成的動態庫又是動態載入的,只有執行的時候才去載入,linux 下的 動態庫 so 就像windows下的 dll一樣。有關動態庫的概念自行上網搜。一下是建立及引用動態庫 test so.h ifndef test so h define test so h ...

LInux下生成靜態庫和動態庫

靜態庫與動態庫生成例項 linux下庫 編譯引數分析 靜態庫動態庫 在編譯過程中已經被載入可執行程式,所以體積較大 在可執行程式執行時才載入記憶體,在編譯過程中只是簡單的引用,所以 體積較小 準備好測試工作,寫好測試 test.h test.c main.c ifndef test h define...