1. 程式人生 > >使用Makefile連結so庫檔案

使用Makefile連結so庫檔案

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

初學Makefile,權當是筆記,希望對別人有些幫助吧。

------------------------------------------------------------------------------------

本次例子目錄結構如下:


目錄說明:

lib目錄是我自己寫的一個so庫檔案,名為libA.so,很簡單,裡面的內容截圖如下:


-------------------------------------------------------------------------------------------------------------

main目錄是測試程式所在目錄,用於測試libA.so,裡面的內容截圖如下:


---------------------------------------------------------------------------------------------------------------------

release目錄用於存放編譯後的so庫檔案和編譯後的測試程式,截圖如下:


-----------------------------------------------------------------------------------------------------------------------

因為main.out用於測試libA.so,所以編譯時我們必須先編譯libA.so,

libA.so的Makefile內容如下:

exe=../release/libA.so### 連結目標檔案$(exe):libA.o gcc -o $(exe) -lstdc++ -fPIC -shared -Xlinker libA.o ### 編譯原始檔libA.o:libA.cpp gcc -lstdc++ -c libA.cpp clean: -rm *.out *.o *.bak

---------------------------------------------------------------------------------------------------------------------------------------

libA.cpp內容如下:

#include <stdio.h>void ShowHello()printf("hello libA \n");}
----------------------------------------------------------------------------------------

main.cpp的Makefile內容如下:

exe=../release/main.out### 連結目標檔案### -L ../release  用於指定libA.so所在目錄### -lA  連結庫檔案libA.so$(exe):main.o gcc -o $(exe) -lstdc++ -Xlinker main.o -L ../release -lA ### 編譯原始檔main.o:main.cpp gcc -lstdc++ -c main.cpp clean: -rm *.out *.o *.bak

--------------------------------------------------------------------------------------------------------------

main.cpp內容如下:

#include<stdio.h>extern void ShowHello();int main(void){ ShowHello(); return 0;}

--------------------------------------------------------------------------------

編譯好libA.cpp和main.cpp,跳到release執行main.out,效果如下:



-----------------------------------------------------------------------------------------------------------------------------------------------------

題外話:


執行程式如果提示找不到xxx.so,
敲以下命令即可:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH      // 把當前目錄加入到庫檔案搜尋目錄環境變數

我當時的錯誤提示如下:

 ./main.out 
./main.out: error while loading shared libraries: libA.so: cannot open shared object file: No such file or directory







           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述