zoukankan      html  css  js  c++  java
  • cocos2d-js3.5 mac上自动绑定c++到js

    按照官方教程来也会出现问题,现在把问题纪录下来,以免以后出现同样的问题不知道咋办了

    按照readme.txt里面的引导,把需要下的软件都安装了,一般都比较简单,只需要输入几个命令即可。

    文章最后会有readme的具体内容。

    然后在终端输入依次输入

    /bin/bash

    export NDK_ROOT=/path/to/android-ndk-r9b

    sh ./test.sh

    这时候会出现一个问题。如下:

    MissingSectionHeaderError: File contains no section headers.

    file: userconf.ini, line: 1

    '-e [DEFAULT] '

    需要我们修改一下 tesh.sh脚本

    随便一个编辑器打开,

    把112行的 

    echo -e "$_CONTENTS" > "$_CONF_INI_FILE"

    改成:

    echo "$_CONTENTS" > "$_CONF_INI_FILE" 

    即可。

    重新执行 sh test.sh应该会成功了。

     

    -------readme.txt----------------

    # What's new
    * Add a prebuilt libclang3.4 in `libclang/`for mac, linux and windows.
    * If you want use the prebuilt licbclang3.4 work with Android NDK, then `only the NDK r9b is can work corrently` with it.

    # Requirements

    * python2.7
    * py-yaml
    * cheetah (for target language templates)
    * libclang, from clang 3.3 or later

    # Usage

    Usage: generator.py [options] {configfile}

    Options:
    -h, --help show this help message and exit
    -s SECTION sets a specific section to be converted
    -t TARGET specifies the target vm. Will search for TARGET.yaml

    Basically, you specify a target vm (spidermonkey is the only current target vm) and the section from
    the `.ini` file you want to generate code for.

    ## Run the simple test with prebuilt libclang3.4

    Included in this repository is a simple test. Use this to confirm the generator is working and that your environment is set up correctly.

    #### NOTE

    * The test uses the prebuilt 3.4 libclang, so you should use `Android NDK r9b`.
    * The test uses <string> and <stdint.h> so you need a C++ implementation that provides these
    * Currently, the test script is setup to use the Android NDK's GNU libstdc++

    ### Mac OS X

    * The OSX 10.9 has a built-in python2.7 and if your os don't have python2.7 then use [Homebrew](http://brew.sh/) to install the python and use pip install the python dependencies.
    <pre>
    brew install python
    </pre>

    * Install python dependices by pip.
    <pre>
    sudo easy_install pip
    sudo pip install PyYAML
    sudo pip install Cheetah
    </pre>

    * Download [64bit ndk-r9b-x86_64](http://dl.google.com/android/ndk/android-ndk-r9b-darwin-x86_64.tar.bz2) from [google](http://developer.android.com/tools/sdk/ndk/index.html)
    * If you are using python installed from other way, copy user.cfg.sample and rename it as `user.cfg` then set the absolute path to python `PYTHON_BIN` in `user.cfg`
    * Run follow command, it will generate a `userconf.ini`, and check the values in it if it occorus any error.
    <pre>
    export NDK_ROOT=/path/to/android-ndk-r9b
    ./test.sh
    </pre>

    ### Ubuntu Linux 12.04 64bit
    * Install python
    <pre>
    sudo apt-get install python2.7
    </pre>
    * Install python dependices by pip.
    <pre>
    sudo apt-get install python-pip
    sudo pip install PyYAML
    sudo pip install Cheetah
    </pre>
    * Download [64bit ndk-r9b-x86_64]( https://dl.google.com/android/ndk/android-ndk-r9b-linux-x86_64.tar.bz2) from [google](http://developer.android.com/tools/sdk/ndk/index.html)
    * If you are using python installed from other way, copy user.cfg.sample and rename it as `user.cfg` then set the absolute path to python `PYTHON_BIN` in `user.cfg`
    * Run follow command, it will generate a `userconf.ini`, and check the values in it if it occorus any error.
    <pre>
    export NDK_ROOT=/path/to/android-ndk-r9b
    ./test.sh
    </pre>

    ### Windows 7 64bit
    * Download python2.7.3 (`32bit`) from (http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi).
    * Add the installed path of python (e.g. C:Python27) to windows environment variable named 'PATH'.
    * Download pyyaml from http://pyyaml.org/download/pyyaml/PyYAML-3.10.win32-py2.7.exe and install it.
    * Download pyCheetah from https://raw.github.com/dumganhar/my_old_cocos2d-x_backup/download/downloads/Cheetah.zip, unzip it to "C:Python27Libsite-packages"
    * Download [64bit NDK-r9b](http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86_64.zip) from [google](http://developer.android.com/tools/sdk/ndk/index.html)
    * Set the environment variables (`PYTHON_ROOT` and `NDK_ROOT`) or just them in `test.bat`.
    * Run "test.bat". The generated codes will be under "simple_test_bindings".

    ### Expected output

    Upon running the test you might see some warnings but should not see any errors.

    The test will create a directory named simple_test_bindings that contains 3 files

    * A .hpp header file for the bindings class
    * A .cpp file implementing the bindings class
    * A .js file that documents how to call (from JavaScript) the methods the C++ class exposes

    # The `.ini` file

    The `.ini` file is a simple text file specifying the settings for the code generator. Here's the
    default one, used for cocos2d-x

    [cocos2d-x]
    prefix = cocos2dx
    events = CCNode#onEnter CCNode#onExit
    extra_arguments = -I../../cocos2dx/include -I../../cocos2dx/platform -I../../cocos2dx/platform/ios -I../../cocos2dx -I../../cocos2dx/kazmath/include -arch i386 -DTARGET_OS_IPHONE -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk -x c++
    headers = ../../cocos2dx/include/cocos2d.h
    classes = CCSprite
    functions = my_free_function

    ## Required sections

    * prefix: the prefix for the project. Must be a valid identifier for the language of the target vm.
    Most of the time, the name will be intermixed between the class name and the function name, since
    all generated (probably) will be free functions, we do that in order to avoid name collition. The
    script will generate ${prefix}.cpp and ${prefix}.hpp as a result.
    * events: a list of identifiers in the form of ClassName#functionName that are events to be called
    from the native world to the target vm.
    * extra_arguments: extra arguments to pass to the clang interface. Basically you can think of this
    as the arguments to pass to the "compiler", so add as many as you need here. If you're targetting
    C++, make sure you add "-x c++" as the last argument to force C++ mode on a ".h" file. Otherwise,
    name your header files as ".hpp".
    * headers: list of headers to parse. Usually you add a single header that in turn `#include`s the
    rest of the files.
    * classes: the classes that will be parsed. Right not is just a string, but it will accept regular
    expressions
    * functions: space-separated list of free functions to be binded. Same as with classes, it will
    support regular expressions.
    * skip: a space-separated list of `Classes::functions` or just `functions` to not generate any code.

    # The templates

    The generator is using [Cheetah templates](http://www.cheetahtemplate.org/) to create a more
    flexible generator. The way it was thought, is that for every target environment, you should provide
    with a way to generate the same C/C++ functionality. Every template has access to the proper meta
    information for the code or generator (function, classes, etc.)

    Right now it's separated in the following set of templates:

    * prelude.c/.h: The header of the generated files.
    * ifunction.c/.h: The template for an instance function
    * ifunction_overloaded.c: The template for the implementation of an overloaded function. An
    overloaded function is exactly the same as a function, but it has an array of functions sharing
    the same name. The current implementation for spidermonkey only works if the overloading is with
    different number of arguments.
    * sfunction.c/.h: The template for a static function
    * sfunction_overloaded.c: The template for an overloaded static function
    * register.c: Here you should add the constructor/finalizer, the registration function (if needed)
    and the footer of the header file. This is the last chunk being generated

    Templates are stored in the `templates/${target}` directory and follow the naming specified above.

    One final part of the puzzle is the `${target}.yaml` file, that contains specific type conversion
    snippets to be used by the templates. For instance, for spidermonkey, this is the place where we
    specify the conversion routines for the native types (to and from int, float, string, etc.)

    # Limitations

    Currently the generator is leveraging clang in order to get information about the C/C++ code, so we
    can only get as much information as clang give us. Known list of things that won't work:

    * variable number of arguments. Solution: write a manual wrapper

  • 相关阅读:
    spring boot所有配置
    Hibernate validator的一些额外特性
    相似序列搜索
    时间序列异常检测
    基于结构的距离度量
    jupyterlab的启动404error问题
    爬虫-Chrome-问题1
    厘清重要概念的内涵与外延
    六)定时任务持久化
    公钥私钥
  • 原文地址:https://www.cnblogs.com/cocox/p/4451378.html
Copyright © 2011-2022 走看看