Gflags和glog兼容性

时间:2015-11-22 20:17:13

标签: gflags glog

我想在我的项目中构建gflags和glog。您可以在下面看到代码。我编译差不多,但由于一些兼容性错误,我会遇到不同的致命错误,具体取决于我尝试在哪个glog版本中使用哪个gflags版本。如图所示,我收到错误

./src/glog/stl_logging.h:56:11: fatal error: 'ext/slist' file not found
# include <ext/slist>" )

我找到了自豪的消息

  

现在glog围绕旗帜的ABI与gflags兼容

在网站上,宣布glog 0.3.3 https://code.google.com/p/google-glog/

但我无法弄清楚哪个版本的gflags。 (我觉得很奇怪,因为glog取决于gflags)

# Install GFlags
ExternalProject_Add(
    GFlagsLib
    URL https://github.com/gflags/gflags/archive/master.zip
    CONFIGURE_COMMAND <SOURCE_DIR>/configure  --prefix=<INSTALL_DIR>
    )
ExternalProject_Get_Property(GFlagsLib install_dir)
include_directories(${install_dir}/include)
set(GFLAGS_LIBRARIES ${install_dir}/lib/libgflags.${link_library_suffix})
set(GFLAGS_PREFIX ${install_dir})

# Install GLog
ExternalProject_Add(
    GLogLib
    URL http://google-glog.googlecode.com/files/glog-0.3.3.tar.gz
    CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --with-gflags=${GFLAGS_PREFIX}
    )
ExternalProject_Get_Property(GLogLib install_dir)

1 个答案:

答案 0 :(得分:0)

我知道这是一个老问题,但我想我会试一试,以防未来的人有类似的问题。首先,看起来你正在从旧的谷歌代码托管网站上从GitHub和glog中提取gflags。在发布问题时,glog已经转移到GitHub并发布了更新的版本(0.3.4)。这可能是导致不兼容的原因。

接下来,虽然CMake的Log.i("TAG", "SERIAL: " + Build.SERIAL); Log.i("TAG","MODEL: " + Build.MODEL); Log.i("TAG","ID: " + Build.ID); Log.i("TAG","Manufacture: " + Build.MANUFACTURER); Log.i("TAG","brand: " + Build.BRAND); Log.i("TAG","type: " + Build.TYPE); Log.i("TAG","user: " + Build.USER); Log.i("TAG","BASE: " + Build.VERSION_CODES.BASE); Log.i("TAG","INCREMENTAL " + Build.VERSION.INCREMENTAL); Log.i("TAG","SDK " + Build.VERSION.SDK); Log.i("TAG","BOARD: " + Build.BOARD); Log.i("TAG","BRAND " + Build.BRAND); Log.i("TAG","HOST " + Build.HOST); Log.i("TAG","FINGERPRINT: "+Build.FINGERPRINT); Log.i("TAG","Version Code: " + Build.VERSION.RELEASE); 功能对于包管理很有用,但它通常会导致必须通过ExternalProject_Add()滚动您自己的find_package()版本来识别标题和库位置后续目标。正如你所看到的,我经历了同样的麻烦,它可能会变得相当脆弱。

最近我开始使用Hunter package manager来处理C ++项目中的依赖项,我可以推荐它作为一个很好的选择。我在my own projects中使用了gflags,glog和其他库。每个Hunter版本都会锁定软件包版本(通过使用适当的参数调用ExternalProject_Get_Property()),以帮助确保成功和可重现的构建。

也许多亏了来自Python(pip)和Node.js(npm)的竞争,C ++包管理总体上已经有了很大的改进。如果您有兴趣,还应该看看Conan.io(来自JFrog)和Buckaroo(来自Facebook)。