1. 編寫**
int add(int a, int b)
int sub(int a, int b)
# base.h的內容
int add(int, int);
int sub(int, int);
#include#include "base.h"
int main()
2. 生成動態庫
gcc -c -fpic add.c sub.c
gcc -shared add.o sub.o -o libbase.so
或gcc -fpic -shared add.c sub.c -o libbase.so
3. 使用動態庫
方式1:執行如下兩條命令會再當前目錄下生成main程式
執行ldd main命令可以看到main鏈結庫的資訊gcc -c main.c
gcc main.o ./libbase.so -o main
ldd main
linux-vdso.so.1 => (0x00007ffec5bb7000)
libbase.so (0x00007fddb700e000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007fddb6c31000)
/lib64/ld-linux-x86-64.so.2 (0x00007fddb7211000)
方式2:執行如下命令生成main程式
注意:此處與上面的方式不同之處在於指定鏈結庫路徑及鏈結庫名稱
gcc -c main.c
gcc main.o -l. -lbase -o main
生成main之後, 執行ldd main檢視鏈結庫資訊
ldd main
linux-vdso.so.1 => (0x00007fff78bb1000)
libbase.so => not found
libc.so.6 => /usr/lib64/libc.so.6 (0x00007fefcd5ea000)
/lib64/ld-linux-x86-64.so.2 (0x00007fefcd9c8000)
不難看出, 如上的方式生成的可執行檔案main, 在使用ldd檢視時, 提示libbase.so未找到
這是因為-l及-l選項只是告訴編譯器庫的名字, 而在目標系統支援的情況下, fpic會生成與位置無關的**
因此實際上編譯之後的main中並未記錄libbase.so的位置, 仍在系統預設的路徑查詢
可以使用如下方式進行解決
再次使用ldd main檢視時, 就不會報錯not foundexport ld_library_path = /home/developer/c/
或export ld_library_path = /home/developer/c/libbase.so
ldd main
linux-vdso.so.1 => (0x00007ffd767ad000)
libbase.so => /home/developer/c/libbase.so (0x00007f50e3154000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007f50e2d77000)
/lib64/ld-linux-x86-64.so.2 (0x00007f50e3357000)
當然也可以配置系統的ld.so.conf檔案進行配置, 配置之後執行ldconfig命令即可
以上內容, 如有錯誤, 歡迎批評指正。
QT Creator使用共享庫(一)建立共享庫
最近使用qt的移動裝置要呼叫個加密的.so,在前人 上折騰了n久也沒出來,終於自己照著幫助一步步作了一下,在此記下一筆。使用的工具 qt creator 測試環境 win 7,qt平台的外設 首先我們寫個共享的庫檔案 1.建立c 庫,選擇共享庫 2.在標頭檔案裡加上個方法,並在自動生成的類裡也加上個...
庫的建立與使用
庫的建立與使用。一 靜態庫的建立與使用 建立乙個庫,含有加減乘除演算法 1 首先編寫演算法程式 如何進入多視窗模式 在底層模式下輸入sp,ctrl ww 游標視窗切換 ctrl wj 游標向下切換 ctrl wk 游標向上切換 2 編寫main函式 3 將加減乘除轉換為.o檔案 4 建立庫 注意 靜...
Qt之建立並使用共享庫
在 windows 中,有動態鏈結庫 dll dynamic link library 在 linux 中,有共享庫 shared library 它們是相同的!由於平台和編譯器的差異,輸出的庫檔案也不同 要建立乙個共享庫,需要執行以下幾個步驟 檔案 新建檔案或專案,選擇 library c 庫 選...