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.cmake
和FindGlog.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文件
参考
chrislzy: 如有疑惑,错误或者建议,请在评论区留下您宝贵的文字; 转载请注明作者和出处,未经允许请勿用于商业用途!