glog交叉编译与使用

目录

  • 版本
  • 编译
  • 简单使用
  • 相关参考

  谷歌 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 文件
    glog交叉编译与使用_第1张图片
    FLAGS_alsologtostderr 为true,消息则存入日志文件,同时打印到 stderr。默认false,只存入日志文件。
    FLAGS_logtostderr 为true,消息只打印到 stderr。默认false,只存入日志文件。
    FLAGS_log_dir 设置日志存储目录
    glog交叉编译与使用_第2张图片
    glog交叉编译与使用_第3张图片

编译完,默认 DCHECK_IS_ON() 为 1,故此处定义的名称, DLOG 等同于 LOG,其下如是。编译时加上 -DNDEBUG ,则其上带 D 开头的信息执行为 (void) 0,即 DLOG 等不执行。

  • test 程序
#include 

#include  

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 运行(需静态编译)。

  • 运行情况
    glog交叉编译与使用_第4张图片

  • 编译 release

同样的程序,编译时加上 -DNDEBUG

arm-linux-gnueabihf-g++  -o test  test.cpp   -I./glog/include  -L./glog/lib -lglog -static -lpthread -DNDEBUG

也可在 test.cpp 文件的 #include 之前 加上 #define NDEBUG ,则编译命令不变。

  • 运行情况
    glog交叉编译与使用_第5张图片

相关参考

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

你可能感兴趣的:(arm,linux,c++,glog)