目标:设置glog的交叉编译器,生成静态库libglog.a;
步骤:
(1)下载最新版本的glog源码,最新版本0.050(2021.08.23)
https://github.com/google/glog
(2)源码目录如下表:
(3)修改交叉编译器的文件,在目录toolchains
复制一份gcc-cxx11.cmake,更名为gcc-cxx11-crosscompiling.cmake,修改交叉编译器
(4)在CMakeLists.txt中可以设置编译为静态库还是动态库
将ON修改为OFF,生成静态库libglog.a;
(5)新建_build目录,并执行cmake命令,生成makefile文件,cmake命令的参数详细讲解请参考这里
cmake -H. -B_build -DCMAKE_TOOLCHAIN_FILE="${PWD}/toolchains/gcc-cxx11-crosscompiling.cmake" && cd -
(6)执行make命令,生成静态库;
ubuntu0compile:~/glog-master/_build$ make
Scanning dependencies of target glog
[ 4%] Building CXX object CMakeFiles/glog.dir/src/demangle.cc.o
[ 9%] Building CXX object CMakeFiles/glog.dir/src/logging.cc.o
[ 13%] Building CXX object CMakeFiles/glog.dir/src/raw_logging.cc.o
[ 18%] Building CXX object CMakeFiles/glog.dir/src/symbolize.cc.o
[ 22%] Building CXX object CMakeFiles/glog.dir/src/utilities.cc.o
[ 27%] Building CXX object CMakeFiles/glog.dir/src/vlog_is_on.cc.o
[ 31%] Building CXX object CMakeFiles/glog.dir/src/signalhandler.cc.o
[ 36%] Linking CXX static library libglog.a
[ 36%] Built target glog
Scanning dependencies of target signalhandler_unittest
[ 40%] Building CXX object CMakeFiles/signalhandler_unittest.dir/src/signalhandler_unittest.cc.o
[ 45%] Linking CXX executable signalhandler_unittest
[ 45%] Built target signalhandler_unittest
Scanning dependencies of target stacktrace_unittest
[ 50%] Building CXX object CMakeFiles/stacktrace_unittest.dir/src/stacktrace_unittest.cc.o
[ 54%] Linking CXX executable stacktrace_unittest
[ 54%] Built target stacktrace_unittest
Scanning dependencies of target demangle_unittest
[ 59%] Building CXX object CMakeFiles/demangle_unittest.dir/src/demangle_unittest.cc.o
[ 63%] Linking CXX executable demangle_unittest
[ 63%] Built target demangle_unittest
Scanning dependencies of target symbolize_unittest
[ 68%] Building CXX object CMakeFiles/symbolize_unittest.dir/src/symbolize_unittest.cc.o
[ 72%] Linking CXX executable symbolize_unittest
[ 72%] Built target symbolize_unittest
Scanning dependencies of target logging_unittest
[ 77%] Building CXX object CMakeFiles/logging_unittest.dir/src/logging_unittest.cc.o
[ 81%] Linking CXX executable logging_unittest
[ 81%] Built target logging_unittest
Scanning dependencies of target stl_logging_unittest
[ 86%] Building CXX object CMakeFiles/stl_logging_unittest.dir/src/stl_logging_unittest.cc.o
[ 90%] Linking CXX executable stl_logging_unittest
[ 90%] Built target stl_logging_unittest
Scanning dependencies of target utilities_unittest
[ 95%] Building CXX object CMakeFiles/utilities_unittest.dir/src/utilities_unittest.cc.o
[100%] Linking CXX executable utilities_unittest
[100%] Built target utilities_unittest
(7)静态库功能测试,在_build/glog会生成可用的头文件,但是开源库里的头文件使用的路径需要修改一下,等编译报错时将头文件的路径glog/去掉,不使用绝对路径就可以了,编写测试代码glog.cpp,并编译执行;
/********************************************************
//glog.cpp
********************************************************/
#include <stdio.h>
#include "glog/logging.h"
int main()
{
//初始化参数
FLAGS_logtostderr = false; //TRUE:标准输出,FALSE:文件输出
FLAGS_alsologtostderr = true; //除了日志文件之外是否需要标准输出
FLAGS_colorlogtostderr = false; //标准输出带颜色
FLAGS_logbufsecs = 0; //设置可以缓冲日志的最大秒数,0指实时输出
FLAGS_max_log_size = 10; //日志文件大小(单位:MB)
FLAGS_stop_logging_if_full_disk = true; //磁盘满时是否记录到磁盘
google::InitGoogleLogging("mqttserver");
google::SetLogDestination(google::GLOG_INFO,"./test");
LOG(INFO) << "this is log";
LOG(WARNING) << "this is warnning";
LOG(ERROR) << "this is error";
google::ShutdownGoogleLogging();
}
编译命令:
g++ glog.cpp -o test -L. -I./ -lglog -pthread
ubuntu0compile:~/glog-master/_build$ ./test
I20210823 19:12:40.152302 20951 glog.cpp:22] this is log
W20210823 19:12:40.152426 20951 glog.cpp:23] this is warnning
E20210823 19:12:40.152499 20951 glog.cpp:24] this is error
文章参考:
(1)http://docs.cocos.com/cocos2d-x/manual/zh/installation/CMake-Guide.html
(2)https://blog.csdn.net/kenstandlee/article/details/117335670
(3)https://www.cnblogs.com/cristiano-duan/p/12275271.html