如何编译luabind支持vs2010之后所有版本

Posted cutepig

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编译luabind支持vs2010之后所有版本相关的知识,希望对你有一定的参考价值。

步骤

  • 下载https://github.com/luabind/luabind/tree/0.9。 其最后一次commit为

    Revision: 8c66030818f0eacbb7356c16776539b55d8c5319
    Author: Peter Colberg <[email protected]>
    Date: 12/24/2011 1:53:29 AM
    Message:
    Lua 5.2: use new macro lua_pushglobaltable

    This macro is not mentioned in the Lua 5.2 manual.
    ----
    Modified: luabind/object.hpp
    Modified: src/scope.cpp

     

  • 添加#include "luabind_compatibility.hpp",内容为
  • /*
    @Author Sygn (https://github.com/sygn-jp)
    
    This file is from https://github.com/sygh-JP/CompactLua . Detailed descriptions could be found
    at the author‘s blog: http://sygh.hatenadiary.jp/entry/2014/06/22/000456 (Japanese only).
    */
    
    #pragma once
    
    #include <lua.hpp>
    #include <boost/version.hpp>
    
    
    // Luabind 0.9.1 uses "boost::operator" but it has been moved to "boost::iterators::operator" in Boost 1.57.0 or later.
    // As a result, many compilation errors will occur at the macro "LUABIND_OPERATOR_ADL_WKND" in "luabind/object.hpp".
    // One of the best and wisest solutions is to modify the source code of Luabind directly.
    // As an alternative way, the following workaround can avoid modifying it but is unbeautiful and pollutes the namespace "boost".
    
    #if (BOOST_VERSION >= 105700)
    #include <boost/operators.hpp>
    namespace luabind
    {
        namespace detail
        {
            // Forward declaration
            template<typename T> class basic_iterator;
        }
    }
    namespace boost
    {
        template<typename T> bool operator ==(
            const luabind::detail::basic_iterator<T>& x,
            const luabind::detail::basic_iterator<T>& y)
        {
            return boost::iterators::operator ==(x, y);
        }
    
        template<typename T> bool operator !=(
            const luabind::detail::basic_iterator<T>& x,
            const luabind::detail::basic_iterator<T>& y)
        {
            return boost::iterators::operator !=(x, y);
        }
    }
    #endif

     

  • 为config。h,和lua_include.hpp 添加#include "luabind_compatibility.hpp"
  • 在policy。hpp添加
  • LUABIND_NUMBER_CONVERTER(long double, number)
    LUABIND_NUMBER_CONVERTER(__int64, number)
    LUABIND_NUMBER_CONVERTER(unsigned __int64, number)

     

 

以上是关于如何编译luabind支持vs2010之后所有版本的主要内容,如果未能解决你的问题,请参考以下文章

如何在VS2010中运行编译C和C++?

vs2010如何生成单个项目,每次编译所有的项目都全部重新生成了

vs2010指定的文件格式无法识别或为不支持的二进制

vs2010可以编译fmt吗

VS2010 窗口布局打乱了之后怎么恢复成默认的啊??

如何在VS2010中运行编译C和C++?