emscripten_run_script()已在优化版本中删除

时间:2016-02-12 05:01:45

标签: javascript c++ emscripten

在我的$(document).ready(function () { $.ajax({ url: 'MenuHandler.ashx', method: 'get', datatype: 'json', success: function (data) { data = JSON.parse(data); buildmenu($('.menu'), data); $('.menu').menu(); } }) var lastliElement; // if more occurance append to the last element function buildmenu(parent, items) { var tabOccurance = []; $.each(items, function () { var nbOccurnace = countOccurance(this.MenuText, items); // search if occurance text alredy exist if (tabOccurance.indexOf(this.MenuText) == -1) { // this doesn't work on ecma6 and above var length = this.ParentID == null ? this.List.length : nbOccurnace; var li = $('<li><a href="Cars/Acura/car.aspx">' + this.MenuText + '(' + length + ')' + '</a></li>'); lastliElement = li; if (!this.Active) { li.addclass('ui-state-disabled'); } li.appendTo(parent); } if (nbOccurnace > 1) tabOccurance.push(this.MenuText); if (this.List && this.List.length > 0) { var ul = $('<ul></ul>'); ul.appendTo(lastliElement); buildmenu(ul, this.List); } }); } // to conunt occurance of menuText function countOccurance(MenuText, list) { var count = 0 $.each(list, function () { if (this.MenuText === MenuText) count++; }); return count; } 文件中,我有一行:

  $this->load->view('ViewData',$data); 
  // change to
    $this->load->view('EditView',$data); 

此函数# # A virtual host using mix of IP-, name-, and port-based configuration # upstream admanager.oneplatform.build { server localhost:8001; } server { listen 80 default_server; server_name _; root /opt/admanager1; index index.html; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; location /newuser/ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://localhost:8001/newuser/; proxy_ssl_session_reuse off; proxy_set_header Host $http_host; proxy_redirect off; } location /update/ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://localhost:8001/update/; proxy_ssl_session_reuse off; proxy_set_header Host $http_host; proxy_redirect off; } } 只是将一条消息写入控制台,以便我知道它已被调用。

使用.cpp进行构建时,这一切都正常,但在使用推荐的发布版emscripten_run_script("callOut();console.error('Hello');"); 进行编译时不会执行任何操作。我甚至无法在javascript输出中找到“hello”文本。

它应该像这样工作吗?有什么方法可以在发布版本中获得此调用吗?

2 个答案:

答案 0 :(得分:1)

问题是我没有等待emscripten代码在调用之前完全初始化。你应该等到调用emscripten main()函数,然后才知道它已经准备好了。

使用-O2时问题变得更糟,因为emcc创建了一个单独的内存初始化文件,必须在emscripten代码准备就绪之前加载。

答案 1 :(得分:0)

emscripten_run_script的替代方法是使用EM_ASM宏。我从来没有遇到过这些在优化版本中消失的问题。

所以你的例子相当于

EM_ASM({
  callOut();
  console.error("Hello");
});