您的位置:首页 > 移动开发 > Cocos引擎

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

2016-03-30 15:47 375 查看
故障报错如下:

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 == cinde
10c2f
x.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息