glog+gflag的安裝


前言

安裝有兩種方式,一種是從包管理器中安裝,另一種是使用源碼安裝。

推薦使用包管理安裝,然后在程序中加入cmake文件,通過cmake文件來查找庫。

不推薦使用源碼安裝,因為在找庫的時候和包管理安裝沖突,產生很多問題

包管理器安裝

# google-glog + gflags
sudo apt-get install libgoogle-glog-dev libgflags-dev
  • cmakelists.txt
add_compile_options(-std=c++11)
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)

find_package (GFlags REQUIRED)
find_package(Glog REQUIRED)

add_executable (foo main.cc)
target_link_libraries (foo ${GLOG_LIBRARIES})

注:最好提供FindGFlags.cmakeFindGlog.cmake文件放到cmake文件夾的路徑下。在使用eigen的使用也最好提供下FindEigen.cmake文件

  • 卸載
sudo apt-get purge libgoogle-glog-dev libgflags-dev

源碼安裝

  • 安裝gflags
git clone https://github.com/google/gflags.git
cd gflags
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DGFLAGS_NAMESPACE=google .
make
make install
  • 安裝glog
git clone https://github.com/google/glog.git
cd glog 
./autogen.sh && ./configure && make && make install

注:具體安裝可能根據版本不同有變動,請參看倉庫內說明文檔安裝

  • cmakelists.txt
find_package (gflags REQUIRED)
include_directories (${gflags_INCLUDE_DIR})

find_package(glog REQUIRED)
include_directories (${glog_INCLUDE_DIR})

add_executable (foo main.cc)
target_link_libraries (foo ${GLOG_LIBRARIES})

注:不用提供cmake文件,因為編譯器會從/usr/local路徑下尋找庫

  • 卸載

查詢安裝地址:

locate glog|grep /usr
locate gflags|grep /usr

刪除安裝包:

sudo rm -rf /usr/local/include/glog/
sudo rm -rf /usr/local/x86_64-linux-gnu/libglog*

sudo rm -rf /usr/local/include/gflags/
sudo rm -rf /usr/local/x86_64-linux-gnu/gflags*

注: 還要刪除相應的cmake文件

常見問題

1、使用 GLog 報錯:libglog.a: error adding symbols: Bad value

/usr/bin/ld: /usr/local/lib/libglog.a(libglog_la-logging.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libglog.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
123

產生該問題的可能原因是在 64位系統中,不能鏈接 GLog 生成動態庫。修改方法是 GLog 需要使用如下方式編譯,加入 -fPIC 編譯選項:

./configure CPPFLAGS="-I/usr/local/include -fPIC" LDFLAGS="-L/usr/local/lib"

代替:

./configure

2、錯誤:undefined reference to google::FlagRegisterer::FlagRegisterer

undefined reference to 'google::FlagRegisterer::FlagRegisterer'
1

可以嘗試先卸載 GFlags:

sudo apt-get purge libgflags-dev

然后重新編譯
另一種可能的解決方案是,在編譯 GLog 時請使用:

./configure CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib"

代替:

./configure

3、錯誤:Make error: failed to link with libgflags.a
產生該問題的原因有可能是需要使用動態庫方式編譯 GFlags
將 GFlags 編譯時選項改成動態庫:

cmake .. -DBUILD_SHARED_LIBS=ON

並重新編譯 GFlags 和 GLog。

4、錯誤:something wrong with flag ‘flagfile’ in file ‘XXX.cc’
請參照 3 中的解決方案重新編譯 GFlags 和 GLog。

總結

  • 推薦使用apt-get的方式安裝glog和gflag,然后在代碼中提供cmake文件

參考


免責聲明!

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



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