3
为了获得最佳性能,我想将emscripten与闭包工具结合使用,但效果不佳,我无法调用我从emscripten在JavaScript中定义的函数。如何将emscripten与闭包工具一起使用
请注意,我从我的项目中提取了一个最小的例子来证明我的意思。
// test.cc
#include <iostream>
#include "emscripten.h"
int main() {
std::cout << "Hello, World!\n";
EM_ASM(goog.dom.appendChild(
document.body,
goog.dom.createDom('p', {'font-weight' : 700}, 'Hello, World!'));
);
}
所以“你好,世界!”正确但随后打印:
exception thrown: ReferenceError: goog is not defined,ReferenceError: goog is not defined
即使goog
应该已经确定,因为我编译,甚至与先进的优化包括封库,这样我有最大的性能。
现在,如果我做同样的事情在JavaScript它工作完全正常:
goog.provide('main');
goog.require('goog.dom');
console.log('Hello, World!');
goog.dom.appendChild(document.body,
goog.dom.createDom('p', {'font-weight': 700}, 'Hello, World!'));
通过我使用这两种结合的方式,我加入此JavaScript文件之前asmjs文件只是为了确保goog
是真正定义的。
另一个有趣的事情要注意的是,当我用简单的优化进行编译时,它实际上工作。
那么如何将emscripten与闭包库和闭包编译器一起使用呢?