【问题标题】:Can not link Boost Graph Library for read_graphviz() example无法为 read_graphviz() 示例链接 Boost Graph Library
【发布时间】:2016-09-19 19:53:36
【问题描述】:

我正在尝试使用 read_graphviz 做一个示例,但我无法帮助链接器将 read_graphviz 函数调用链接到正确版本的 read_graphviz。

http://www.boost.org/doc/libs/1_61_0/libs/graph/doc/read_graphviz.html 有 read_graphviz 的三个模板版本: 命名空间提升 {

  template <typename MutableGraph>
  bool read_graphviz(std::istream& in, MutableGraph& graph,
                     dynamic_properties& dp,
                     const std::string& node_id = "node_id");

  template <typename MutableGraph>
  bool read_graphviz(std::string& str, MutableGraph& graph,
                     dynamic_properties& dp,
                     const std::string& node_id = "node_id");

  template <typename InputIterator, typename MutableGraph>
  bool read_graphviz(InputIterator begin, InputIterator end,
                     MutableGraph& graph, dynamic_properties& dp,
                     const std::string& node_id = "node_id");
}

我正在尝试调用它的第二个版本。 这是我的示例代码:

#include <boost/graph/graphviz.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/property_map/dynamic_property_map.hpp>
#include <boost/graph/graph_utility.hpp>

using namespace boost;

typedef boost::adjacency_list < 
    boost::vecS,
    boost::vecS,
    boost::undirectedS,
    boost::property<boost::vertex_index_t, int>,
    boost::property<boost::edge_index_t, int>> Graph;


int main(int argc, char** argv)
{

  Graph dual_g;

  boost::dynamic_properties dp;

  boost::property_map<Graph, boost::vertex_index_t>::type vIndex = get(boost::vertex_index, dual_g);
  dp.property("vertex_id",vIndex);

  boost::property_map<Graph, boost::edge_index_t>::type eIndex = get(boost::edge_index, dual_g);
  dp.property("edge_id", eIndex);

  read_graphviz("dtest.dot", dual_g , dp); //, "node_id");


  return 0;
}

我尝试使用命令编译:

g++ -std=c++11 main.cpp -o main -lboost_system 

错误:

/tmp/cctwokpF.o: In function `bool boost::read_graphviz_new<boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_index_t, int, boost::no_property>, boost::property<boost::edge_index_t, int, boost::no_property>, boost::no_property, boost::listS> >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, boost::property<boost::vertex_index_t, int, boost::no_property>, boost::property<boost::edge_index_t, int, boost::no_property>, boost::no_property, boost::listS>&, boost::dynamic_properties&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
main.cpp:(.text._ZN5boost17read_graphviz_newINS_14adjacency_listINS_4vecSES2_NS_11undirectedSENS_8propertyINS_14vertex_index_tEiNS_11no_propertyEEENS4_INS_12edge_index_tEiS6_EES6_NS_5listSEEEEEbRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERT_RNS_18dynamic_propertiesESJ_[_ZN5boost17read_graphviz_newINS_14adjacency_listINS_4vecSES2_NS_11undirectedSENS_8propertyINS_14vertex_index_tEiNS_11no_propertyEEENS4_INS_12edge_index_tEiS6_EES6_NS_5listSEEEEEbRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERT_RNS_18dynamic_propertiesESJ_]+0x80): undefined reference to `boost::detail::graph::read_graphviz_new(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::detail::graph::mutate_graph*)'
collect2: error: ld returned 1 exit status

【问题讨论】:

    标签: c++ boost graphviz boost-graph


    【解决方案1】:

    你需要链接函数的实现。

    最简单的方法是包含它:

    #include  <libs/graph/src/read_graphviz_new.cpp>
    

    如果您喜欢更多示例以获得灵感:read_graphviz src

    【讨论】:

    • 我试图包含它,但找不到它 main.cpp:14:49: 致命错误: libs/graph/src/read_graphviz_new.cpp: No such file or directory #include ^ 编译终止。
    • @Angelos 规范的方法是链接libboost_grap.a/.so/.dll。在 Win32 上,这应该是自动的。在 linux 上,包括我说的文件绝对是最简单的,但它需要 Boost 分发存档。如果您没有它,请使用预构建的库 - 如果您没有自己构建它,那么无论您从哪里安装 boost。
    • 感谢您的回复。我正在使用 Arch Linux,并且我已经从 Arch 存储库安装了 boost 库。链接器需要那个标志-lboost_graph,我没有新它,但是当你告诉我libboost_grap.a/.so/.dll时我找到了它。如果添加该标志,则不需要#include &lt;libs/graph/src/read_graphviz_new.cpp&gt;
    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多