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