Luaplus vs2008 编译

    技术2026-08-28  4

    昨天想安装个Luaplus的环境,可是遇到了不少问题,在此记录下。

    Luaplus的官方网站是http://luaplus.org/

    官网上只有使用git进行更新的源码,我一直没有连上。在下载页面中的文件没有源码,只有3种OS环境下编译出的二进制文件。

    网上找了不少源码,找到了个用vs2005可编译的源码工程。(在csdn中搜到的,搜索的关键字是 luaplus学习 )。

    自己机器上只有vs2008,于是就尝试使用08进行编译。

     

    用vs2008进行工程转换后,编译,3个error如下:

    /luaplus.cpp(137) : error C3861:LuaState_UserStateOpen_Internal”: 找不到标识符 /luaplus.cpp(143) : error C3861:“LuaState_UserStateThread_Internal”: 找不到标识符 /luaplus.cpp(149) : error C3861:“LuaState_UserStateFree_Internal”: 找不到标识符 

     

    出错的原因是这3个函数在定义之前进行了调用。如下为调用这3个函数的地方:

    void LuaState_UserStateOpen(lua_State* L) { LuaState_UserStateOpen_Internal(L); } void LuaState_UserStateThread(lua_State* L, lua_State* L1) { LuaState_UserStateThread_Internal(L, L1); } void LuaState_UserStateFree(lua_State* L) { LuaState_UserStateFree_Internal(L); } 

     

    处理也很简单,将上述3个调用函数定义移至被调用函数的下面即可。

    如此编译就可以通过,但是在使用这个静态库的时候链接就会报错,找不到先前出错的3个函数的符号!

    再回来仔细看代码,发现上述3个调用函数定义在一对宏之间:

    LUA_EXTERN_C_BEGIN ... LUA_EXTERN_C_END 

     

    这对宏的作用很明显,就是去除C++的函数命名方式,用C的方式进行符号链接。

    于是将这对宏加在移动的3个函数外围。

    编译,链接,OK!编译的静态库就可以正常运行了!

    最新回复(0)