Hello: Since there are currently not any native Windows binaries publicly available for Ledger 3.0, and it seems that an official release is impending, I decided to make a stab at creating a Windows binary for the world to share. Up to now, I've been using a Cygwin build, but that's going to be pretty inconvenient for most Windows users.
After six hours of work, it is evident that Windows is not really a friendly platform for open-source development. But I think I've made some progress today, and maybe just a little more work will get the job done. I have Visual Studio 2012, and no other older versions, so that's what I used to build all of ledger's dependencies, and eventually ledger itself. There were quite a few dependencies to take care of, each of which has to be obtained by ad-hoc methods because Windows users can't have modern package management. CMake and Python were relatively easy to take care of. I had to build Boost from scratch, because there are no pre-built binaries for VC11. I built Boost 1.46.1, because that's what the ledger CMakeLists.txt specifies, but I also downloaded and built the latest 1.53.0 while I was at it. By far the most troublesome dependencies were GMP and MPFR. If it hadn't been for http://gladman.plushost.co.uk/oldsite/computing/gmp4win.php, I would have been defeated. But that web page had enough hints to get me going. There is no Windows build support for GMP, but there is a forked library called MPIR that is a drop-in GMP replacement. Both GMP and MPFR use non-standard build tools, and they both have other quirky build requirements (manually laying a Microsoft build structure over a Unix source tree, and manually re-arranging the source tree after the fact). Anyway, I eventually got them built, and did the necessary work to convince CMake that they existed. Eventually, I successfully finished the generation step (cmake -G "Visual Studio 11" completed with plenty of warnings but no errors.) This produced a number of .vcxproj files, which I then opened in Visual Studio 2012. Now I'm stuck. When I try to build libledger, I get lots of boost-related error messages. I tried repeating the build using boost 1.53 instead of 1.46.1, but I still get the same errors. If someone can help me resolve those errors, I think I might have a Windows binary ready soon. I've attached a file with the error output for one file, account.cc. Thanks for any help that a boost expert can provide, Tim Crews -- --- You received this message because you are subscribed to the Google Groups "Ledger" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
account.cc 2>f:\opensourceprojects\ledger\src\account.h(131): error C2668: 'boost::bind' : ambiguous call to overloaded function 2> F:/Downloads/DevelopmentTools/BoostWithBinaries/boost_1_53_0\boost/bind/bind.hpp(1728): could be 'boost::_bi::bind_t<R,F,L> boost::bind<boost::arg<I>,_Ty2,std::pair<_Ty1,_Ty2>>(M std::pair<_Ty1,_Ty2>::* ,A1)' 2> with 2> [ 2> R=ledger::account_t *const &, 2> F=boost::_mfi::dm<ledger::account_t *,std::pair<const ledger::string,ledger::account_t *>>, 2> L=boost::_bi::list1<boost::arg<1>>, 2> I=1, 2> _Ty2=ledger::account_t *, 2> _Ty1=const ledger::string, 2> M=ledger::account_t *, 2> A1=boost::arg<1> 2> ] 2> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\functional(1290): or 'std::_Bind<_Forced,_Ret,_Fun,_V0_t,_V1_t,_V2_t,_V3_t,_V4_t,_V5_t,<unnamed-symbol>> std::bind<_Ty2,std::pair<_Ty1,_Ty2>,boost::arg<I>&>(_Rx std::pair<_Ty1,_Ty2>::* const ,_Arg0)' [found using argument-dependent lookup] 2> with 2> [ 2> _Forced=false, 2> _Ret=void, 2> _Fun=std::_Pmd_wrap<ledger::account_t *std::pair<const ledger::string,ledger::account_t *>::* ,ledger::account_t *,std::pair<const ledger::string,ledger::account_t *>>, 2> _V0_t=boost::arg<1> &, 2> _V1_t=std::_Nil, 2> _V2_t=std::_Nil, 2> _V3_t=std::_Nil, 2> _V4_t=std::_Nil, 2> _V5_t=std::_Nil, 2> <unnamed-symbol>=std::_Nil, 2> _Ty2=ledger::account_t *, 2> _Ty1=const ledger::string, 2> I=1, 2> _Rx=ledger::account_t *, 2> _Arg0=boost::arg<1> & 2> ] 2> while trying to match the argument list '(ledger::account_t std::pair<_Ty1,_Ty2>::* , boost::arg<I>)' 2> with 2> [ 2> _Ty1=const ledger::string, 2> _Ty2=ledger::account_t * 2> ] 2> and 2> [ 2> I=1 2> ] 2>f:\opensourceprojects\ledger\src\account.h(131): error C2780: 'iterators::enable_if<boost::is_class<T>,boost::transform_iterator<UnaryFunc,Iterator>>::type boost::make_transform_iterator(Iterator)' : expects 1 arguments - 2 provided 2> F:/Downloads/DevelopmentTools/BoostWithBinaries/boost_1_53_0\boost/iterator/transform_iterator.hpp(154) : see declaration of 'boost::make_transform_iterator' 2>f:\opensourceprojects\ledger\src\account.h(135): error C2668: 'boost::bind' : ambiguous call to overloaded function 2> F:/Downloads/DevelopmentTools/BoostWithBinaries/boost_1_53_0\boost/bind/bind.hpp(1728): could be 'boost::_bi::bind_t<R,F,L> boost::bind<boost::arg<I>,_Ty2,std::pair<_Ty1,_Ty2>>(M std::pair<_Ty1,_Ty2>::* ,A1)' 2> with 2> [ 2> R=ledger::account_t *const &, 2> F=boost::_mfi::dm<ledger::account_t *,std::pair<const ledger::string,ledger::account_t *>>, 2> L=boost::_bi::list1<boost::arg<1>>, 2> I=1, 2> _Ty2=ledger::account_t *, 2> _Ty1=const ledger::string, 2> M=ledger::account_t *, 2> A1=boost::arg<1> 2> ] 2> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\functional(1290): or 'std::_Bind<_Forced,_Ret,_Fun,_V0_t,_V1_t,_V2_t,_V3_t,_V4_t,_V5_t,<unnamed-symbol>> std::bind<_Ty2,std::pair<_Ty1,_Ty2>,boost::arg<I>&>(_Rx std::pair<_Ty1,_Ty2>::* const ,_Arg0)' [found using argument-dependent lookup] 2> with 2> [ 2> _Forced=false, 2> _Ret=void, 2> _Fun=std::_Pmd_wrap<ledger::account_t *std::pair<const ledger::string,ledger::account_t *>::* ,ledger::account_t *,std::pair<const ledger::string,ledger::account_t *>>, 2> _V0_t=boost::arg<1> &, 2> _V1_t=std::_Nil, 2> _V2_t=std::_Nil, 2> _V3_t=std::_Nil, 2> _V4_t=std::_Nil, 2> _V5_t=std::_Nil, 2> <unnamed-symbol>=std::_Nil, 2> _Ty2=ledger::account_t *, 2> _Ty1=const ledger::string, 2> I=1, 2> _Rx=ledger::account_t *, 2> _Arg0=boost::arg<1> & 2> ] 2> while trying to match the argument list '(ledger::account_t std::pair<_Ty1,_Ty2>::* , boost::arg<I>)' 2> with 2> [ 2> _Ty1=const ledger::string, 2> _Ty2=ledger::account_t * 2> ] 2> and 2> [ 2> I=1 2> ] 2>f:\opensourceprojects\ledger\src\account.h(135): error C2780: 'iterators::enable_if<boost::is_class<T>,boost::transform_iterator<UnaryFunc,Iterator>>::type boost::make_transform_iterator(Iterator)' : expects 1 arguments - 2 provided 2> F:/Downloads/DevelopmentTools/BoostWithBinaries/boost_1_53_0\boost/iterator/transform_iterator.hpp(154) : see declaration of 'boost::make_transform_iterator' 2> amount.cc
