我想在我的项目中构建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)
答案 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)。