Linux下編寫簡單的動態鏈結庫

2021-07-02 08:01:40 字數 1465 閱讀 9325

linux下編寫簡單的動態鏈結庫

(1)linux下編寫動態鏈結庫。通常靜態鏈結庫是編譯的時候和原始檔一起編譯生成可執行檔案的。動態鏈結庫則不是,它是乙個已經編譯好的檔案(靜態則不是),只有當程式執行的時候(但是編譯的時候要將動態鏈結庫的資訊載入進來),它才去找動態鏈結庫拿它想用的一些函式。而且動態鏈結庫可以提高通用性,編寫乙個動態鏈結庫可以讓很多人一起用。有點類似類?

test_so.h**:

#ifndef _test_so_h

#define _test_so_h

#include

#include

void test_a();

void test_b();

void test_c();

#endif

test_a.c**:

#include "test_so.h"

void test_a()

test_b.c**:

#include "test_so.h"

void test_b()

test_c.c**:

#include "test_so.h"

void test_c()

然後將這些檔案編譯為動態鏈結庫gcc test_a.c test_b.c test_c.c --shared -fpic -o libtest.so,則生成libtest.so檔案(它已經編譯好了),和普通可執行程式不同,它並沒有main()。

(2)、再看如何編寫main()

編寫test.c**:

#include "test_so.h"

int main(void)

gcc test.c -l . -libtest.so -o test ((-l .)表示動態鏈結庫在本目錄)。

然後通過ldd ./test檢視有哪些動態鏈結庫和可執行程式有關聯。

結果發現libtest.so沒有關聯。

執行./test出現:

./test: error while loading shared libraries: libtest.so: cannot open shared object file: no such file or directory

也就是說找不到這個動態鏈結庫,但是我們已經在編譯test.c的時候加入路徑了?

(3)、這時候修改ld_library_path變數

#vim ~/.bashrc

新增:ld_library_path = $ld_library_path:/home/***/test

export ld_library_path

退出以後

#source ~/.bashrc

或者/etc/ld.so.conf新增動態鏈結庫的路徑。

#vim /etc/ld.so.conf

新增一行:/home/***/test

然後重新整理一把

#/sbin/ldconfig -v

再編譯執行成功。

Linux下編寫簡單的動態鏈結庫

1 linux下編寫動態鏈結庫。通常靜態鏈結庫是編譯的時候和原始檔一起編譯生成可執行檔案的。動態鏈結庫則不是,它是乙個已經編譯好的檔案 靜態則不是 只有當程式執行的時候 但是編譯的時候要將動態鏈結庫的資訊載入進來 它才去找動態鏈結庫拿它想用的一些函式。而且動態鏈結庫可以提高通用性,編寫乙個動態鏈結庫...

Linux下編寫動態鏈結庫的簡單過程

1 使用編譯選項 fpic 產生與位置無關的 2 使用編譯選項 fvisibility hidden 隱藏符號 3 使用鏈結選項 shared 表示生成動態鏈結庫 4 使用鏈結選項 wl 將引數傳遞給鏈結器 5 使用鏈結選項 soname 指定庫名,注意不是庫檔名 6 保險起見,顯式鏈結 c 庫,即...

在linux下編寫動態鏈結庫的步驟

類似 windows 系統中的動態鏈結庫,linux 中也有相應的共享庫用以支援 的復用。windows 中為 dll 而linux 中為 so 我來詳細的告訴你如何在 linux 下編寫動態庫 以及如何使用它.在 linux 下編寫動態鏈結庫的步驟 1.編寫庫的標頭檔案和原始檔.2.把所有涉及到的...