① 什麼是SO文件
SO文件,也稱為Linux下的動態鏈接庫,是編譯好的代碼和數據集合,用於供其他程序調用。它們類似於Windows中的.dll文件,主要由C或C++編譯而成,與Java的位元組碼形式不同。在Linux系統中,SO文件並非可以直接執行,而是作為共享庫存在,用於支持其他程序的功能實現。
要使用SO文件,首先需要進行動態庫的編譯。例如,假設有一個包含頭文件so_test.h和三個源文件test_a.c、test_b.c、test_c.c的項目,通過命令gcc test_a.c test_b.c test_c.c -fPIC -shared -o ***.so進行編譯。標志-fPIC確保庫文件可以被動態鏈接,-shared標記生成的是共享庫。而若要外部程序能夠連接到這個庫,這個標志是必不可少的。
鏈接階段,當你有一個程序源文件test.c,並且要將其與編譯好的SO庫***.so一起生成可執行文件test時,可以使用命令gcc test.c -L. -ltest -o test。通過-ltest參數告訴編譯器鏈接哪個庫,-L.表示當前目錄作為庫搜索路徑。運行ldd test命令,可以看到程序如何調用SO庫中的函數,從而展示了庫在實際執行中的作用。