2016-09-14 60 views
3

当我尝试我的C++程序与英特尔MPI链接在一起,我有这样的问题:错误链接,以提高系列化

[[email protected] ising]$ mpiicc -o bin/ising obj/main.o obj/solver.o obj/periodicfunction.o obj/tools.o obj/treeofdevil.o -L ~/ising_solver/gurobi650/linux64/lib/ -L ~/ising_solver/boost_install/lib/ -parallel -lgurobi_c++ -lgurobi65 -lboost_regex -lboost_thread -lboost_system -lboost_mpi -lboost_serialization 
obj/solver.o: In function `boost::archive::detail::iserializer<boost::mpi::packed_iarchive, std::vector<double, std::allocator<double> > >::load_object_data(boost::archive::detail::basic_iarchive&, void*, unsigned int) const': 
solver.cpp:(.text._ZNK5boost7archive6detail11iserializerINS_3mpi15packed_iarchiveESt6vectorIdSaIdEEE16load_object_dataERNS1_14basic_iarchiveEPvj[_ZNK5boost7archive6detail11iserializerINS_3mpi15packed_iarchiveESt6vectorIdSaIdEEE16load_object_dataERNS1_14basic_iarchiveEPvj]+0x209): undefined reference to `boost::serialization::array_wrapper<double> const boost::serialization::make_array<unsigned long>(double*, unsigned long)' 

关键的错误是:

undefined reference to `boost::serialization::array_wrapper<double> const boost::serialization::make_array<unsigned long>(double*, unsigned long)' 

我想我安装升压mpi正确。我已经在链接(-lboost_serialization)中包含了序列化...我应该怎么做?

我不知道这是因为下面的序列化方案中,序列化升压元组:

namespace boost { namespace serialization { 


    template<typename Archive, typename T1> 

    void serialize(Archive & ar, 
        boost::tuple<T1> & t, 

        const unsigned int) 
    { 
     ar & t.get<0>(); 
    } 

    template<typename Archive, typename T1,typename T2> 
    void serialize(Archive & ar, 

        boost::tuple<T1,T2> & t, 

        const unsigned int) 
    { 

     ar & t.get<0>(); 
     ar & t.get<1>(); 
    } 


    template<typename Archive, typename T1,typename T2,typename T3> 
    void serialize(Archive & ar, 

        boost::tuple<T1, T2, T3> & t, 

        const unsigned int) 
    { 

     ar & t.get<0>(); 
     ar & t.get<1>(); 
     ar & t.get<2>(); 
    } 


    template<typename Archive, typename T1,typename T2,typename T3 ,typename T4> 
    void serialize(Archive & ar, 

        boost::tuple<T1, T2, T3 ,T4> & t, 

        const unsigned int) 
    { 

     ar & t.get<0>(); 
     ar & t.get<1>(); 
     ar & t.get<2>(); 
     ar & t.get<3>(); 
    } 

    template<typename Archive, typename T1,typename T2,typename T3 ,typename T4,typename T5> 
    void serialize(Archive & ar, 

        boost::tuple<T1, T2, T3 ,T4, T5> & t, 

        const unsigned int) 
    { 

     ar & t.get<0>(); 
     ar & t.get<1>(); 
     ar & t.get<2>(); 
     ar & t.get<3>(); 
     ar & t.get<4>(); 
    } 

    template<typename Archive, typename T1,typename T2,typename T3 ,typename T4,typename T5,typename T6 > 
    void serialize(Archive & ar, 

        boost::tuple<T1, T2, T3 ,T4, T5, T6> & t, 

        const unsigned int) 
    { 

     ar & t.get<0>(); 
     ar & t.get<1>(); 
     ar & t.get<2>(); 
     ar & t.get<3>(); 
     ar & t.get<4>(); 
     ar & t.get<5>(); 
    } 


    template<typename Archive, typename T1,typename T2,typename T3 ,typename T4,typename T5,typename T6 ,typename T7> 
    void serialize(Archive & ar, 

        boost::tuple<T1, T2, T3 ,T4, T5, T6 ,T7> & t, 

        const unsigned int) 
    { 

     ar & t.get<0>(); 
     ar & t.get<1>(); 
     ar & t.get<2>(); 
     ar & t.get<3>(); 
     ar & t.get<4>(); 
     ar & t.get<5>(); 
     ar & t.get<6>(); 
    } 


}} 
+0

你可以发布你的代码吗? –

+0

我对错误信息有些困惑,因为根据版本1.61.0的文档,'make_array'的声明是:'template inline const array_wrapper make_array(T * t,S s) ',所以不应该错误信息说'make_array '? – user4407569

+0

代码本身太大......不知道我们是否真的可以调试任何东西...... –

回答

0

在文件“助推/包括/ boost/serialization/array.hpp“,注释掉这两行:

template<class S> 
friend const boost::serialization::array_wrapper<T> make_array(T* t, S s); 

然后它会正常连接。