後端開發核心技術 第4章編譯 靜態鏈結和動態連線

2021-10-05 23:33:28 字數 2224 閱讀 9441

add.h

#ifndef _add_h_

#define _add_h_

intadd

(int a,

int b)

;#endif

add.cpp

#include

"add.h"

intadd

(int a,

int b)

sub.h

#ifndef _sub_h_

#define _sub_h_

intsub

(int a,

int b)

;#endif

sub.cpp

#include

"sub.h"

intsub

(int a,

int b)

main.cpp

#include

"add.h"

#include

"sub.h"

#include

"iostream"

using

namespace std;

intmain()

將add.cpp與sub.cpp編譯成.0檔案

g++

-c add.cpp

g++-c sub.cpp

生成檔案add.o sub.o,-c的編譯選項,表示只執行到編譯,輸出目標檔案。

由.o檔案建立靜態庫(.a)檔案

ar cr libmymath.a sub.o add.o
會生成libmymath.a檔案

在程式中使用靜態庫

g++

-o main main.cpp -l.

-lmymath

生成目標mian,並執行

g++

-fpic -o add.o -c add.cpp

g++-fpic -o sub.o -c sub.cpp

g++-shared -o libmymath.so add.o sub.o

或者一步解決

g++-fpic -shared -o libmymath.so add.cpp sub.cpp

生成目標檔案

g++

-o main main.cpp -l.

-lmymath

./mian

報錯error while loading shared libraries: libmymath.so: cannot open shared object file: no such file or directory

因為找不到動態庫檔案libmymath.so,程式執行時,會在/usr/lib和/lib等目錄下查詢需要的動態庫檔案,找到就載入動態庫

1、編譯目標**時指定的動態庫搜尋路徑

2、環境變數ld_ld_library_path指定的動態庫搜尋路徑

3、配置檔案/etc/ld.so.conf中指定的動態庫搜尋路徑

4、預設動態庫搜尋路徑/lib

5、預設動態庫搜尋路徑/usr/lib

1、將檔案libmymath.so複製到/usr/lib中

cp libmymath.so /usr/lib/
2、修改環境變數ld_library_path

export ld_library_path=

/usr/lib:$ld_ld_library_path

sudo ldconfig

某程式要呼叫動態庫函式,作業系統會首先檢視正在執行的程式,看在記憶體中是否有此函式的拷貝,有的話,就會共享哪乙個拷貝。

靜態鏈結庫,每個程式需要呼叫都會拷貝到自己的**段中

只要動態庫給該程式的介面沒變,只需要重新用新生成的動態庫替換原來的就可以。如果是靜態庫,使用庫的函式需要重新編譯

可以明確的指明在什麼情況下,載入哪個動態庫。有乙個很大的軟體,每次執行的時候,根據操作需求去將一小部分載入記憶體

在編譯的時候,已經將庫函式載到程式中去了,而動態庫函式在執行時才被裝在。所有在程式執行的時候,用靜態庫速度更快

後端開發核心技術 第5章除錯 strace

所有作業系統在其核心都有一些內建的函式,這些函式可以用來完成一些系統級別的功能,這些函式被稱為系統呼叫,這些函式代表了使用者空間到核心空間的一種轉換 例如使用者空間呼叫open函式,在核心空間中則會呼叫sys open。系統呼叫並不直接返回錯誤碼,而是將錯誤碼放入到乙個名為errno的全域性變數中。...

後端開發核心技術 第7章網路IO模型 poll

include intpoll struct pollfd fds,unsigned int nfds,int timeout 1 fds 指向乙個結構體陣列的第0個元素的指標,每個陣列元素都是乙個struct pollfd結構,用於指定測試某個給定的fd的條件 2 nfds 表示fds結構體陣列的...

後端開發核心技術 第8章 網路分析工具 lsof

lsof list open files 是乙個列出當前系統開啟檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線和硬體。所以如傳輸控制協議 tcp 和使用者資料報協議 udp 套接字等,系統在後台都為該應用程式分配了乙個檔案描述符,無論這...