【发布时间】:2017-04-04 00:04:13
【问题描述】:
我正在尝试获取一个 C++ 项目,该项目使用 GitHub 上的 Boost 在 Travis CI 上正确编译。
首先我在 ubuntu 上尝试了软件包和 PPA,但它们太旧了(我至少需要 Boost 1.61)。
只有在 Travis CI 上编译 Boost(下载、编译)时,它才能工作,但不幸的是,编译时间很长(11-18 分钟)而且日志文件也很大。
考虑如何解决这个问题,我想到了在我的机器上编译 boost,压缩,上传到一些网络服务器,然后下载和复制 /usr/local/[include/lib] 上的相应文件。
Here 是我在我的机器上使用的编译器。我使用
编译了 boost./bootstrap.sh --prefix=/home/andrei/boostabc
/usr/bin/time ./b2 install link=static
Here 是 travis 文件(和存储库)。在 cmets 中是我编译 boost 的方式。
问题是我得到了很多错误:
/usr/local/lib/libboost_filesystem.a(operations.o): In function `(anonymous namespace)::dir_itr_first(void*&, void*&, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, boost::filesystem::file_status&, boost::filesystem::file_status&) [clone .isra.46] [clone .constprop.56]':
operations.cpp:(.text+0xa8): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
我用谷歌搜索了这个errors,发现可能有关于某些 C++11 ABI 和宏的错误配置。我不太理解这个解释,也不知道如何让它发挥作用。
如果您能指出解决此问题的正确方向,我将不胜感激。
【问题讨论】:
-
也使用 Travis CI 进行 boost,但将其设为一个单独的项目,它将获取源代码、构建 boost、打包它并上传到存储库(例如“一些网络服务器”)。我在我的 CI 系统中使用了类似的过程,除了我使用工件存储库和依赖管理将事物联系在一起。如果每次提交都会触发所有使用的依赖项的构建,那会发疯。
标签: c++ c++11 gcc boost travis-ci