谷歌 glog 是一个实现应用程序级日志记录的C++98库。该库提供了基于C++风格流和各种辅助宏的日志API。简直不要太好用😃😃😃
版本
目前的主分支,版本 glog VERSION 0.6.0
编译
修改 toolchains/gcc-cxx11.cmake 文件中的编译器,改成自身所使用的编译器
# Sample toolchain file for building with gcc compiler
#
# Typical usage:
# *) cmake -H. -B_build -DCMAKE_TOOLCHAIN_FILE="${PWD}/toolchains/gcc.cmake"
# set compiler
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
# set c++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
修改 CMakeLists.txt 文件 41行,关闭动态库,编译出来即为静态库
option (BUILD_SHARED_LIBS "Build shared libraries" OFF)
编译命令
cmake -H. -B_build -DCMAKE_TOOLCHAIN_FILE="${PWD}/toolchains/gcc-cxx11.cmake"
cmake --build ./_build/
cd _build/
make DESTDIR=./out install
编译安装完成,在 _build/out 目录下即为编译出的使用库与头文件。
先编译一个动态库,然后在编译一个静态库,将生成的静态库文件 libglog.a 拷贝至动态编译出的 _build/out/usr/local/lib 目录,这样后期不管静态还是动态编译就都不受影响
_build/out/usr/local/lib
_build/out/usr/local/include

新建或修改 local 文件夹名称为 glog ,将上面的 lib 与 include 文件夹复制到文件夹 glog 下,其后的 test.cpp 源文件与 glog 文件夹处于同一目录下,用于后面编译包含库文件与头文件。
简单使用
- glog/logging.h 文件

FLAGS_alsologtostderr为true,消息则存入日志文件,同时打印到 stderr。默认false,只存入日志文件。
FLAGS_logtostderr为true,消息只打印到 stderr。默认false,只存入日志文件。
FLAGS_log_dir设置日志存储目录


编译完,默认 DCHECK_IS_ON() 为 1,故此处定义的名称, DLOG 等同于 LOG,其下如是。编译时加上 -DNDEBUG ,则其上带 D 开头的信息执行为 (void) 0,即 DLOG 等不执行。
- test 程序
#include <iostream>
#include <glog/logging.h>
int main(int argc, char **argv) {
//FLAGS_logtostderr = true;
FLAGS_alsologtostderr = true;
google::InitGoogleLogging(argv[0]);
FLAGS_log_dir = "./";
LOG(INFO) << "INFO";
LOG(WARNING) << "WARNING";
DLOG(ERROR) << "ERROR";
//LOG(FATAL) << "FATAL"; //执行则退出程序
DCHECK(!FLAGS_logtostderr) << "DCHECK"; //检查括号内部为真,否则退出程序
DLOG_IF(INFO, true) << "DLOG_IF"; //条件成立打印
DCHECK_EQ(FLAGS_alsologtostderr,0) << "DCHECK_EQ"; ////检查括号内部相等,否则退出程序
return 0;
}
- 编译 debug
arm-linux-gnueabihf-g++ -o test test.cpp -I./glog/include -L./glog/lib -lglog -static -lpthread
交叉编译完成,由于程序不涉及硬件相关,也可直接在虚拟机上的 linux 运行(需静态编译)。
-
运行情况

-
编译 release
同样的程序,编译时加上 -DNDEBUG
arm-linux-gnueabihf-g++ -o test test.cpp -I./glog/include -L./glog/lib -lglog -static -lpthread -DNDEBUG
也可在 test.cpp 文件的 #include <glog/logging.h> 之前 加上 #define NDEBUG ,则编译命令不变。
- 运行情况

相关参考
https://blog.youkuaiyun.com/kenstandlee/article/details/117335670
https://zhuanlan.zhihu.com/p/26025722
https://www.cnblogs.com/tianyajuanke/archive/2013/02/22/2921850.html

本文详细介绍了如何编译谷歌的glog日志库,包括修改编译文件、设置C++标准和编译选项,以及静态库与动态库的生成。此外,还展示了glog库的简单使用方法,包括日志级别设置和调试检查,并提供了编译测试程序的命令。文章最后提及了不同编译模式下的运行情况和相关参考资料。
1965

被折叠的 条评论
为什么被折叠?



