使用EMScripten和React Native

时间:2017-05-23 19:18:45

标签: react-native emscripten

我已在命令提示符下使用此命令使用EMScripten将c代码编译为js代码:

emcc [xxx.c] -o [xxx.js] -s EXPORTED_FUNCTIONS="['function1']"

当我从index.js文件中的xxx.js导入Module时,Module对象为空。不确定我是否需要在生成的文件中更改某些内容或者我是否做错了什么..

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from 'react-native';
import Module from './xxx';

console.log(Module) // gives me {}

任何建议将不胜感激。 谢谢:))

2 个答案:

答案 0 :(得分:1)

在导入emscripten js文件之前,您需要创建一个“Module”对象并实现一个属性(函数)“onRuntimeInitialized”。

只有在对此函数进行回调之后,您才能期望Module对象非空。

window.Module = {
    onRuntimeInitialized : function() {
        console.log("Emscripten Ready!");
        var event = new Event('emReady');
        // Dispatch the event.
        document.dispatchEvent(event);
    }
};

// Now register for this event in your React code and only call Module functions when this event has been received.

答案 1 :(得分:0)

我遇到了同样的问题,找到了一个解决问题的emcc选项:-s MODULARIZE=1

MODULARIZE将所有输出放入函数中,因此,当您调用Module时,可以将其作为函数(Module())进行调用,而不会收到空对象。

有关更多详细信息,下面是指向我的更深入答案的链接:

https://stackoverflow.com/a/54117913/4848700