glog交叉编译与使用

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  谷歌 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.csdn.net/kenstandlee/article/details/117335670
https://zhuanlan.zhihu.com/p/26025722
https://www.cnblogs.com/tianyajuanke/archive/2013/02/22/2921850.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值