以hello 為例,製作 a so 庫檔案

2021-10-03 14:48:49 字數 2688 閱讀 3149

先編寫hello程式

建立工作目錄,mkdir hello_test

新建 hello.c 檔案 touch hello.c

可以用 gedit hello.c 也可以用vi hello.c

開啟檔案後,輸入如下**

int main(int argc,char **ar**)//在一些編譯器中,這行**自動生成

else

return 0;

}以上**可以直接編譯連線成可執行檔案

輸入 gcc -o hello hello.c 這樣直接生成 hello的可執行檔案

在 終端 輸入 ./hello 就列印 hello world! 輸入 ./hello xiaoyige 終端就列印 hello xiaoyige

gcc也可以用交叉編譯工具代替,這樣編譯的hello檔案就可以執行在相關開發板上

比如 aarch64-linux-gnu-gcc -o hello hello.c

編譯兩個.o檔案

我們新建乙個hello1.c檔案,同時將hello.c檔案修改為如下

#include 「stdio.h」

char hello();

int main(int argc,char **ar**)

else

return 0;

}hello1.c如下

#include 「stdio.h」

char hello()

一起編譯可以生成hello可執行檔案,命令 gcc -o hello hello.c hello1.c

分開編譯 生成hello.o 命令 gcc -c -o hello.o hello.c

再生成 hello1.o 命令 gcc -c -o hello1.o hello1.c

生成hello可執行檔案 命令 gcc -o hello hello.o hello1.o

下面介紹如何生成.a靜態庫

輸入命令 gcc -c -o hello.o hello.c

這樣在hello_test目錄下生成 hello.o檔案

再輸入命令 ar crs hello.a hello.o

再hello_test目錄下生成hello.a檔案

再輸入 命令 gcc -o hello hello.o hello.a可以生成hello可執行檔案

可以測試一下,輸入 ./hello 則列印hello world!

輸入 ./hello xiaoyige 列印出 hello xiaoyige

當然,也可以用多個檔案生成乙個.a靜態庫,命令是ar crs hello.a hello.o hello1.o

輸入 gcc -o hello hello.o hello1.o hello.a生成hello可執行檔案

下面介紹如何生成.so動態庫

我們將hello1.c生成 .so庫,由hello.c呼叫

用生成.a的 兩個.o檔案直接生成 .so庫時,輸入生成.so庫檔案命令 gcc -shared -o hello.so hello1.o

會報如下錯誤

/usr/bin/ld: hello.o: relocation r_x86_64_32 against.rodata' can not be used when ****** a shared object; recompile with -fpic /usr/bin/ld: hello1.o: relocation r_x86_64_32 against.rodata』 can not be used when ****** a shared object; recompile with -fpic

/usr/bin/ld: final link failed: nonrepresentable section on output

collect2: error: ld returned 1 exit status

參考部落格 中的方法

將 資料夾中的 兩個.o檔案刪除,用如下命令重新生成 .o檔案

生成 hello.o 命令 gcc -fpic -c -o hello.o hello.c

生成hello1.o 命令 gcc -fpic -c -o hello1.o hello1.c

這樣 重新生成了 hello.o和hello1.o兩個檔案 ,再輸入以下命令

gcc -shared -fpic -o libhello.so hello1.o(我們使用.so庫時通常以lib開頭)

這樣就生成了 libhello.so動態庫檔案

生成hello可執行檔案 命令,參考部落格

輸入命令

gcc -o hello hello.o ./libhello.so

測試 hello可執行檔案與上述結果一致

將hello copy到桌面測試cp -r hello /home/xiaoyige/desktop/

執行hello時 ./hello出現如下錯誤

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

我們將上述生成的 libhello.so複製到桌面 cp -r libhello.so /home/xiaoyige/desktop/,hello就可以執行了

或者這時我們將上面生成的libhello.so複製到usr/local/lib目錄下

以GNU的hello為例演示製作rpm包的方法

本文的演示示例中用到的系統平台是rhel5.4。製作rpm包需要用到開發發工具,這裡可以通過基於yum安裝 development tools 和 development libraries 兩個開發組來進行安裝。同時,本文只是乙個製作示例,以gnu的hello來演示製作過程。1 製作rpm包要以普...

C 簡單遊戲外掛程式製作 以Warcraft 為例

一 宣告windows api 中的函式和常量 鍵盤hook結構函式 structlayout layoutkind.sequential public class keyboardhookstruct region dllimport 設定鉤子 dllimport user32.dll chars...

C 簡單遊戲外掛程式製作 以Warcraft 為例

網上有很多外掛程式製作的教程,大多是講針對大型網路遊戲的,主要包含一些抓包 反彙編 c 的知識綜合。事實也如此,常見的外掛程式都是使用vc 寫的,從來沒有過c 或者其他.net語言編寫的外掛程式。其實作為遊戲外掛程式來說,主要就是三個功能 模擬鍵盤操作 模擬滑鼠操作 修改記憶體資料。修改記憶體資料比...