代码之家  ›  专栏  ›  技术社区  ›  Angelos

无法链接read_graphviz()示例的Boost Graph Library

  •  4
  • Angelos  · 技术社区  · 9 年前

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

    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
    
    1 回复  |  直到 9 年前
        1
  •  3
  •   sehe    9 年前

    您需要链接功能的实现。

    最简单的方法是将其包括在内:

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

    如果您喜欢更多的灵感样本: read_graphviz src