cocos2dx3.2 lua 独立自定义socket类绑定问题

本文分析了一种在使用Cocos2d-x工具生成Lua绑定时遇到的错误,并提供了详细的解决方案。通过调整头文件包含的方式,可以避免绑定生成过程中的警告和错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

故障报错如下:

txxxxmac:tolua txxxx$ ./genbindings_mysocket.py 
PYTHON_BIN not defined, use current python.
generating userconf.ini...
Generating bindings for mysocket...
Using userconfig 
  [('androidndkdir', '/Android-op/android-ndk-r9b'), ('clangllvmdir', '/Android-op/android-ndk-r9b/toolchains/llvm-3.3/prebuilt/darwin-x86_64'), ('cocosdir', '/Users/txxxx/Desktop/rpg/frameworks/cocos2d-x'), ('cxxgeneratordir', '/Users/txxxx/Desktop/rpg/frameworks/cocos2d-x/tools/bindings-generator'), ('extra_flags', '')]

.... Generating bindings for target lua

.... .... Processing section mysocket 

====
Errors in parsing headers:
1. <severity = Warning,
    location = <SourceLocation file '/Android-op/android-ndk-r9b/toolchains/llvm-3.3/prebuilt/darwin-x86_64/lib/clang/3.3/include/float.h', line 86, column 9>,
    details = "'FLT_DIG' macro redefined">
2. <severity = Warning,
    location = <SourceLocation file '/Android-op/android-ndk-r9b/toolchains/llvm-3.3/prebuilt/darwin-x86_64/lib/clang/3.3/include/float.h', line 87, column 9>,
    details = "'DBL_DIG' macro redefined">
3. <severity = Warning,
    location = <SourceLocation file '/Android-op/android-ndk-r9b/toolchains/llvm-3.3/prebuilt/darwin-x86_64/lib/clang/3.3/include/float.h', line 106, column 9>,
    details = "'FLT_MAX' macro redefined">
4. <severity = Warning,
    location = <SourceLocation file '/Android-op/android-ndk-r9b/toolchains/llvm-3.3/prebuilt/darwin-x86_64/lib/clang/3.3/include/float.h', line 107, column 9>,
    details = "'DBL_MAX' macro redefined">
5. <severity = Warning,
    location = <SourceLocation file '/Android-op/android-ndk-r9b/toolchains/llvm-3.3/prebuilt/darwin-x86_64/lib/clang/3.3/include/float.h', line 114, column 9>,
    details = "'FLT_MIN' macro redefined">
6. <severity = Warning,
    location = <SourceLocation file '/Android-op/android-ndk-r9b/toolchains/llvm-3.3/prebuilt/darwin-x86_64/lib/clang/3.3/include/float.h', line 115, column 9>,
    details = "'DBL_MIN' macro redefined">
====

Traceback (most recent call last):
  File "/Users/txxxx/Desktop/rpg/frameworks/cocos2d-x/tools/bindings-generator/generator.py", line 1306, in <module>
    main()
  File "/Users/txxxx/Desktop/rpg/frameworks/cocos2d-x/tools/bindings-generator/generator.py", line 1302, in main
    generator.generate_code()
  File "/Users/txxxx/Desktop/rpg/frameworks/cocos2d-x/tools/bindings-generator/generator.py", line 980, in generate_code
    self._parse_headers()
  File "/Users/txxxx/Desktop/rpg/frameworks/cocos2d-x/tools/bindings-generator/generator.py", line 1017, in _parse_headers
    self._deep_iterate(tu.cursor)
  File "/Users/txxxx/Desktop/rpg/frameworks/cocos2d-x/tools/bindings-generator/generator.py", line 1041, in _deep_iterate
    self._deep_iterate(node, depth + 1)
  File "/Users/txxxx/Desktop/rpg/frameworks/cocos2d-x/tools/bindings-generator/generator.py", line 1041, in _deep_iterate
    self._deep_iterate(node, depth + 1)
  File "/Users/txxxx/Desktop/rpg/frameworks/cocos2d-x/tools/bindings-generator/generator.py", line 1021, in _deep_iterate
    if cursor.kind == cindex.CursorKind.CLASS_DECL:
  File "/Users/txxxx/Desktop/rpg/frameworks/cocos2d-x/tools/bindings-generator/clang/cindex.py", line 1248, in kind
    return CursorKind.from_id(self._kind_id)
  File "/Users/txxxx/Desktop/rpg/frameworks/cocos2d-x/tools/bindings-generator/clang/cindex.py", line 624, in from_id
    raise ValueError,'Unknown cursor kind'
ValueError: Unknown cursor kind
---------------------------------
Generating lua bindings fails.

--------------------------------- 



解决办法:在lua绑定的.h头文件中,导入了未绑定lua的类头,调整一下就可以成功生成绑定

如:

将ODSocket绑定到lua时也出现楼主说到的问题(raise ValueError,'Unknown cursor kind),原因在于部分头文件无法生成,ODSocket.h中:


#ifdef WIN32
#include <winsock.h>
typedef int socklen_t;
#else
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <netdb.h>
#include <fcntl.h>
#include "errno.h"
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <arpa/inet.h>
typedef int SOCKET;


//#pragma region define win32 const variable in linux
#define INVALID_SOCKET -1
#define SOCKET_ERROR -1
//#pragma endregion
#endif



上面这段代码导致无法生成lua绑定类,我这的解决方式是将部分非必须的include头文件移到cpp中即可,ODSocket.h改为:
#ifdef WIN32
#include <winsock.h>
typedef int socklen_t;
#else
typedef int SOCKET;


//#pragma region define win32 const variable in linux
#define INVALID_SOCKET -1
#define SOCKET_ERROR -1
//#pragma endregion
#endif


ODSocket.cpp中引入相关头文件:
#ifdef WIN32
#include <winsock.h>
typedef int socklen_t;
#else
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <netdb.h>
#include <fcntl.h>
#include "errno.h"
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <arpa/inet.h>
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值