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與閉包庫和閉包編譯器一起使用呢?