c++ google glog模块安装和基本使用(ubuntu)环境
1,如何安装
1 Git clone https://github.com/google/glog.git
2 cd glog
3 ./autogen.sh
4 ./configure --prefix=path(install)
5 make
6 make install
说一下,下载下来的源码包里带有CMakeList.txt和makefile,所以如果你想把编译的东西隔离出来,并且已经装好了cmake,也可以新建一个build,依次执行:cd build,cmake ..,make,然后就可以在里面看到编译出来用的东西了。
需要用的东西在哪里?
1,方法1:
你的下载目录/glog/.libs/libglog.a
你的下载目录/src/glog (下面有一堆h头文件)
还有一个so文件,不知道是否有用:和.a文件在同一个目录下
2,方法2
build/libglog.a
build/glog/(头文件)
2,最简单的demo
//this is main_log.cpp
#include "glog/logging.h" // glog 头文件
int main(){
google::InitGoogleLogging("daqing"); //初始化一个log
FLAGS_logtostderr = ; //输出到控制台
LOG(INFO) << "info test"; //输出一个Info日志
LOG(WARNING) << "warning test"; //输出一个Warning日志
LOG(ERROR) << "error test"; //输出一个Error日志
//LOG(FATAL) << "fatal test"; //输出一个Fatal日志,这是最严重的日志并且输出之后会中止程序,暂时注掉
LOG(INFO)<<"info test lastone";
google::ShutdownGoogleLogging(); //不用log的时候应该释放掉,不然会内存溢出
}
//正确的返回结果应该是这样的:
I0531 ::37.912454 main_log.cpp:] info test
W0531 ::37.912642 main_log.cpp:] warning test
E0531 ::37.912667 main_log.cpp:] error test
I0531 ::37.912691 main_log.cpp:] info test lastone
如何编译呢?
3,g++编译
经过复制粘贴,我的目录结构是这样的:
./libglog.a
./include/glog/(一堆头文件)
编译命令:g++ main_log.cpp ./libglog.a -I ./include -std=c++11 -DDEBUG -lpthread -o sample
一般ubuntu自带g++(或者g++,学名好像叫gun),没有的话apt-get也可以安。
-lpthread是个啥?
g++ -l参数就是用来指定程序要链接的库,比如我们自已要用到一个第三方提供的库名字叫libtest.so,那么我们只要把 libtest.so拷贝到/usr/lib里,编译时加上-ltest参数,我们就能用上libtest.so库了,所以-lpthread指向的是一个叫libpthread.so的库文件,并且我和找到了这个库,是这样的/usr/lib/x86_64-linux-gnu/libpthread.so,话说,为啥中间隔了一层啊喂。这个库据说是处理多线程的,大约glog是自己一个线程跑得吧。也挺科学的。
g++的其他参数:
.a文件直接在cpp文件后面就可以了,头文件需要用-I(杠i)指明,-std指定c++版本和标准,-o指定输出的文件是sample,实际运行:./sample
4,cmake编译
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD )
#规定cmake的最低版本,用以提示用户升级cmake
project(daqing) add_executable(daqing main33.cpp )
#依据给定的脚本生成一个叫daqing的可执行文件
find_package(Threads)
#据说find会在环境的路径中寻找相关的或者依赖的lib,大约是需要在-lpthread之前先定义一个变量或者找一找吧
include_directories("/home/center/c/include")
#头文件在哪里呢?
target_link_libraries(daqing "/home/center/c/libglog.a" ${CMAKE_THREAD_LIBS_INIT})
#这句话指定在链接目标文件的时候需要链接的外部库,其效果类似gcc的编译参数“-l”,可以解决外部库的依赖问题,当然了,变量的顺序不能变,不然会造成错误
5,如何打印日志?
#include "glog/logging.h" // glog 头文件
int main(){
google::InitGoogleLogging("Daqing"); //初始化log的名字为daqing
google::SetLogDestination(google::GLOG_INFO, "./test_log/"); //设置输出日志的文件夹,文件夹必须已经存在
google::SetStderrLogging(google::GLOG_WARNING);
google::SetLogFilenameExtension("log_");
FLAGS_colorlogtostderr = true; // Set log color
FLAGS_logbufsecs = ; // Set log output speed(s)
FLAGS_max_log_size = ; // Set max log file size
FLAGS_stop_logging_if_full_disk = true; // If disk is full
LOG(INFO) << "hello i am info!";
LOG(WARNING) << "hello i am warning test"; //输出一个Warning日志
LOG(ERROR) << "hello i am error test"; //输出一个Error日志
google::ShutdownGoogleLogging();
}
打印到日志(框加不上,直接复制吧)
#include "glog/logging.h" // glog 头文件
int main(int argc,char* argv[]){
FLAGS_log_dir="/home/center/daqing/glog_project/logs";
//FLAGS_logtostderr = true; //设置日志消息是否转到标准输出(控制台)
FLAGS_alsologtostderr = true; //设置日志消息除了日志文件之外是否去标准输出
//FLAGS_colorlogtostderr = true; //设置记录到标准输出的颜色消息(如果终端支持)
FLAGS_log_prefix = true; //设置日志前缀是否应该添加到每行输出
FLAGS_logbufsecs = 1; //设置可以缓冲日志的最大秒数,0指实时输出
FLAGS_max_log_size = 100; //设置最大日志文件大小(以MB为单位)
FLAGS_stop_logging_if_full_disk = true; //设置是否在磁盘已满时避免日志记录到磁盘
google::InitGoogleLogging(argv[0]); //根据程序名称初始化一个日志
//google::SetLogDestination(google::GLOG_ERROR, "/home/center/daqing/glog_project/logs/error_");
LOG(INFO) << "info test"; //输出一个Info日志
LOG(WARNING) << "warning test"; //输出一个Warning日志
LOG(ERROR) << "error test"; //输出一个Error日志
//LOG(FATAL) << "fatal test"; //输出一个Fatal日志,这是最严重的日志并且输出之后会中止程序,暂时注掉
LOG(INFO)<<"info test lastone";
google::ShutdownGoogleLogging(); //不用log的时候应该释放掉,不然会内存溢出
}
6,2020.01.03更新
因为项目需要,最近又重新编译了一下glog,发现竟然跑不起来了!哭,有可能是环境不一样,也有可能是git上的源代码更新了,在此更新一下自己的安装过程,
缺依赖的提前装一下依赖哦:
sudo apt-get install autoconf automake libtool
git clone https://github.com/google/glog.git
cd glog
##./configure --prefix=path(install)改成了如下的命令
./configure CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib"
#我估计,大概的意思就是头文件放到了/usr/local/include下,库文件在/usr/local/lib,反正后期g++我正好用,这样的好处是,不用在乱七八糟的安装目录中一通狂找
make
sudo make install
安装完成以后按理说,这个时候复制一下标题2里的demo代码,然后随便找个目录创建main.cpp ,把libglog.a复制到当前文件夹下,执行:
g++ main.cpp ./libglog.a -I /usr/local/include -L /usr/local/lib -o main.out -lpthread -std=c++
就可以了啊,但是,,,想得美,人家给报错了,报错是这样的:
./libglog.a(libglog_la-logging.o): In function `__static_initialization_and_destruction_0':
/home/center/glog/src/logging.cc:: undefined reference to `google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, char const*, void*, void*)'
/home/center/glog/src/logging.cc:: undefined reference to `google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, char const*, void*, void*)'
/home/center/glog/src/logging.cc:: undefined reference to `google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, char const*, void*, void*)'
/home/center/glog/src/logging.cc:: undefined reference to `google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, char const*, void*, void*)'
/home/center/glog/src/logging.cc:: undefined reference to `google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, char const*, void*, void*)'
./libglog.a(libglog_la-logging.o):/home/center/glog/src/logging.cc:: more undefined references to `google::FlagRegisterer::FlagRegisterer(char const*, char const*, char const*, char const*, void*, void*)' follow
collect2: error: ld returned exit status
什么?gflags???黑人问号脸,,,,行吧,我再去编译一下gflags
git clone https://github.com/gflags/gflags.git
cd gflags
mkdir build && cd build
cmake .. -DBUILD_SHARED_LIBS=ON -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC ..
make -j4
sudo make install
此处参考:感谢原作者
然后我通过sudo find / -name libgflags.a找到了一个动态库,嘿嘿,我们不如把它,,,拷到main.cpp的目录下,然后,缺啥引啥
g++ main.cpp ./libglog.a ./libgflags.a -I /usr/local/include -L /usr/local/lib -o main.out -lpthread -std=c++
不愧是我,一句都没报错,直接可以运行。。。
最后说一句,c++关联太多,我也不知道啥是啥了,也不知道为啥不需要gflags的头文件和so库,就记个笔记留着以后找吧:
glog安装包目录:~/glog -I(-i) /usr/local/include -L /usr/local/lib 动态库:/usr/local/lib/libglog.a
gflags安装包目录:~/glog/gflags/build -i和-L估计都在里面,另外在-I(-i) /usr/local/include -L /usr/local/lib中貌似也有gflags的库和头,动态库:/usr/lib/x86_64-linux-gnu/libgflags.a
c++ google glog模块安装和基本使用(ubuntu)环境的更多相关文章
- window环境下glog的安装
window环境下glog的安装 分类: c++2014-09-23 14:12 32人阅读 评论(0) 收藏 举报 下载后解压,利用Visual Studio打开google-glog.sln.生成 ...
- perl模块安装
转自: http://www.cnblogs.com/itech/archive/2009/08/10/1542832.html http://www.mike.org.cn/blog/index.p ...
- python安装、模块安装
python安装 windows 下载安装包 https://www.python.org/downloads 改环境变量 [右键计算机]-->[属性]-->[高级系统设置]-->[ ...
- python之模块安装
在python中,python官方提供了很多可以扩展的包,用以增强python的功能. 因为用到了excel的读写功能,需要安装xlrd的包,一下是安装步骤 1.首先从python的官方库下载相应的包 ...
- python3 中mlpy模块安装 出现 failed with error code 1的决绝办法(其他模块也可用本方法)
在python3 中安装其它模块时经常出现 failed with error code 1等状况,使的安装无法进行.而解决这个问题又非常麻烦. 接下来以mlpy为例,介绍一种解决此类安装问题的办法. ...
- Google glog 使用
Google glog 使用 1 简介 Googleglog 库实现了应用级的日志记录,提供了C++ 风格的流操作和各种助手宏. 代码示例: #include <glog/logg ...
- [转] npm 模块安装机制简介
npm 是 Node 的模块管理器,功能极其强大.它是 Node 获得成功的重要原因之一. 正因为有了npm,我们只要一行命令,就能安装别人写好的模块 . $ npm install 本文介绍 npm ...
- npm 模块安装机制简介
npm 是 Node 的模块管理器,功能极其强大.它是 Node 获得成功的重要原因之一. 正因为有了npm,我们只要一行命令,就能安装别人写好的模块 . $ npm install 本文介绍 npm ...
- Mac MySQLdb模块安装,可算解决了
转载:http://blog.csdn.net/janronehoo/article/details/25207825 短评:这篇文章感觉是比较全面解决Mac MySQLdb模块安装问题的文章了,特别 ...
随机推荐
- How to Install Oracle Java 11 on Ubuntu 18.04 LTS (Bionic) Written by Rahul, Updated on April 3, 20
本文系转载备份 请阅读点击下面链接阅读原文以获取更佳地阅读体验.谢谢. How to Install Oracle Java 11 on Ubuntu 18.04 LTS (Bionic) Writt ...
- jQuery---京东轮播图
京东轮播图 有个计数的,点右边,计数增加,判断计数是否超过总的长度,超过设置计数为0,再设置当前的图片动画,兄弟的图片动画 左边点击同理,计数是--,判断计数是否等于-1,等于则reset计数为总长度 ...
- axios的数据拦截(拦截器)
大家在开发项目中是否遇到过数据延迟,举个例子 你点某个功能 会有 1-2s的延迟,这1-2s可能会在你的页面显示一个一直转着圈圈的动画,不知道有没有小伙伴还不知道这个功能是如何实现的呢?其实在一个项目 ...
- maven-设置aliyun远程库
maven默认的远程库下载起来非常慢,习惯改成aliyun的库. 一.修改maven配置 打开maven配置文件setting.xml,改mirror <mirrors> <mirr ...
- 测试用例与PUCCH
- 利用 Hexo + Github 搭建自己的博客
扯在前面 在很久很久以前,一直就想搭建属于自己的一个博客,但由于各种原因,最终都不了了之,恰好最近突然有了兴趣,于是就自己参照网上的教程,搭建了属于自己的博客. 至于为什么要搭建自己的博客了?哈哈,大 ...
- (转)linux 之 grep命令
转自:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html 简介 grep (global search regular e ...
- 解决pjax重复加载js导致事件重复绑定的问题
个人博客 地址:http://www.wenhaofan.com/article/20180925232057 1.所有js统一在pjax容器外引入 在pjax容器外引入的js只会被引入一次,所以不会 ...
- JavaScript函数、对象和数组
一.JavaScript函数 1.定义函数:函数的通用语法如下 function function_name([parameter [, ...]]) { statements; } 由关键字func ...
- OpenCV3+VS2015 经常出现debug error abort()has been called问题
方案1:图片路径错误:查看imread的路径