刪除在我.cpp
文件我有一個線:emscripten_run_script()以優化的建立
emscripten_run_script("callOut();console.error('Hello');");
此功能callOut
只是寫一條消息到控制檯,讓我知道它被調用。
與-g4
一起構建時,這一切都可以正常工作,但在編譯時推薦使用-O2
。我甚至無法在javascript輸出中找到文本「hello」。
它應該像這樣工作嗎?有什麼方法可以在發佈版本中獲得此調用?
刪除在我.cpp
文件我有一個線:emscripten_run_script()以優化的建立
emscripten_run_script("callOut();console.error('Hello');");
此功能callOut
只是寫一條消息到控制檯,讓我知道它被調用。
與-g4
一起構建時,這一切都可以正常工作,但在編譯時推薦使用-O2
。我甚至無法在javascript輸出中找到文本「hello」。
它應該像這樣工作嗎?有什麼方法可以在發佈版本中獲得此調用?
的問題是,我沒有等待emscripten代碼來調用它之前完全初始化。你應該等到emscriten main()
函數被調用,然後你就知道它已經準備好了。
當使用-O2
時,問題變得更嚴重,因爲emcc創建了一個單獨的內存初始化文件,必須在emscripten代碼準備好之前加載它。
emscripten_run_script的替代方法是使用EM_ASM宏。我從來沒有遇到過這些在優化版本中消失的問題。
所以,你的例子是相當於
EM_ASM({
callOut();
console.error("Hello");
});