在WINDOWS系統中有很多的動態鏈接庫(以.DLL為後綴的文件,DLL即Dynamic Link Library)。這種動態鏈接庫,和靜態函數庫不同,它裡面的函數並不是執行程序本身的一部分,而是根據執行程序需要按需裝入,同時其執行代碼可在多個 執行程序間共享,節省了空間,提高了效率,具備很高的靈活性。同樣,LINUX的也具備類似的動態鏈接庫,而且為數不少。在/lib目錄下,就有許多以.so作後綴的文件,這就是LINUX系統應用的動態鏈接庫,只不過與WINDOWS叫法不同,它叫so,即Shared Object,共享對象。(在LINUX下,靜態函數庫是以.a作後綴的) X-WINDOW作為LINUX下的標准圖形窗口界面,它本身就採用了很多的動態鏈接庫(在/usr/X11R6/lib目錄下),以方便程序間的共享, 節省佔用空間。flash只是一個插件,在windows中就是一個ocx的鏈接庫方式(和dll略有不同),因此linux中一旦你了一個共享函數庫,你還需要安裝它。其實簡單的方法就是拷貝 x0dx0a你的庫文件到指定的標準的目錄(例如/usr/lib),然後運行ldconfig。 x0dx0a如果你沒有許可權去做這件事情,例如你不能修改/usr/lib目錄,那麼 x0dx0a你就只好通過修改你的環境變數來實現這些函數庫的使用了。首先, x0dx0a你需要創建這些共享函數庫;然後,設置一些必須得符號鏈接,特別 x0dx0a是從soname到真正的函數庫文件的符號鏈接,簡單的方法就是運行ldconfig: x0dx0aldconfig -n directory_with_shared_libraries x0dx0a然後你就可以設置你的LD_LIBRARY_PATH這個環境變數,它是一個以逗號 x0dx0a分隔的路徑的集合,這個可以用來指明共享函數庫的搜索路徑。例如 x0dx0a,使用bash,就可以這樣來 x0dx0a啟動一個程序my_program: x0dx0aLD_LIBRARY_PATH=.LD_LIBRARY_PATH my_program
㈡ linux的C編程,怎麼使用so文件
linux下的.so文件為共享庫,相當於windows下的dll文件,使用方法如下:
在你的工程源代碼里包含.h頭文件,然後可以調用動態庫里的函數,在鏈接的時候加上如下編譯器參數:
-l xx.so
如果你的so文件是以lib開頭的,還可以直接這樣使用:
-lxx
xx是你的.so文件名
其實使用方法和你使用數學庫函數是一樣的,源代碼中添加
#include <math.h>,編譯的時候,加上-lm參數。
㈢ 請問我有一個.so文件,如何在Linux下編程使用呢
-lxx
xx是你的.so文件名
其實使用方法和你使用數學庫函數是一樣的,源代碼中添加
#include <math.h>,編譯的時候,加上-lm參數。
註:linux下的.so文件為共享庫,相當於windows下的dll文件。
linux下編寫調用so文件實例
.so是Linux(Unix)下的動態鏈接庫. 和.dll類似.
比如:
文件有: a.c, b.c, c.c
gcc -c a.c
gcc -c b.c
gcc -c c.c
gcc -shared libXXX.so a.o b.o c.o
要使用的話也很簡單. 比如編譯d.c, 使用到libXXX.so中的函數, libXXX.so地址是MYPATH
gcc d.c -o d -LMYPATH -lXXX
注意不是-llibXXX
test.c文件和一個test.h,這兩個文件要生成libsotest.so文件。然後我還有一個testso.c文件,在這個文件裡面調用libsotest.so中的函數。
編寫的過程中,首先是編譯so文件,我沒有編寫makefile文件,而是參考的2裡面說的直接寫的gcc命令。
因為so文件裡面沒有main函數,所以是不可執行的,所以編譯的時候要加上-c,只生成目標文件。