C++新庫安裝過程


C++新庫安裝過程

Configure

Configure文件:是一個sh腳本文件,這一步一般是檢查當前系統的依賴環境問題,最后生成對應的Makefile文件,一般會在結尾跟上安裝的目錄(默認在/usr/local下)
--prefix: 自定義安裝的目錄
-exec-prefix=EPREFIX: 依賴庫的目錄,如果不指定,將默認為prefix中指定的目錄

./Configure --prefix=/tmp/usr/local/

make

按照上述生成的Makefile來編譯新庫,編譯新庫時依賴的其他靜態庫和動態庫在這一步完成。

make

make install

生成新庫的頭文件以及動態庫與靜態庫,頭文件放在/usr/local/include中,靜態庫和動態庫放在/usr/local/lib中,.a或者.so,以備使用。由於涉及到寫文件,所以需要sudo權限。

sudo make install

將新建的庫作為一個獨立的模塊進行使用

當使用一個第三方依賴庫的時候,我們可以將第三方庫的.h和.a、.so當做一個文件夾放在項目目錄下,在項目的Makefile中寫出依賴的頭文件路徑和庫文件路徑

INCLUDES:= -I. -I./third_party/include

LDFLAGS:= -Wl,-rpath,/third_party/lib,-rpath,/lib/,-rpath,/usr/lib/,-rpath,/usr/local/lib

$(EXECUTABLE): $(ALL_OBJECTS)
      $(CC) $(ALL_OBJECTS) -o $@ $(LDFLAGS)  //  ALL_OBJECTS是其他依賴庫的.o文件
%.o: %.cpp
      $(CC) $(CFLAGS) $(INCLUDES) $< -o $@   // CFLAGS是一系列的c的配置,如 std=c++11這種

note: ./third_party/include和./third_party/lib都盡量包含進去,如若只包含前者忽略后者,編譯不會報錯誤,但是加載動態庫運行的時候,會報找不到動態庫的錯誤(可以使用ldd [execute_file]命令查看)。動態鏈接時,linux共享庫鏈接器ld.so來鏈接動態庫,ld.so尋找動態庫的順序如下:

  • ELF可執行文件中動態段中DT_RPATH所指定的路徑。即在編譯目標代碼時, 對gcc加入鏈接參數“-Wl,-rpath”指定動態庫搜索路徑

gcc -Wl,-rpath,/home/arc/test,-rpath,/lib/,-rpath,/usr/lib/,-rpath,/usr/local/lib test.c

  • 環境變量LD_LIBRARY_PATH 指定的動態庫搜索路徑

export LD_LIBRARY_PATH=/tmp/local/lib/

  • /etc/ld.so.cache中所緩存的動態庫路徑,這個可以通過先修改配置文件/etc/ld.so.conf中指定的動態庫搜索路徑,然后執行ldconfig命令來改變。
  • 默認的動態庫搜索路徑/lib、/usr/lib、/usr/local/lib。

安裝新庫過程
動態庫鏈接問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM