3

我想知道如何FS在 Emscripten 中使用。我想我已经完成了 wiki 中提到的所有事情,但我仍然得到Uncaught ReferenceError: FS is not defined. 如果我在生成的 *.js 文件中搜索文字FS没有出现,我认为应该有。

这是我到目前为止的代码。

信息媒体.cpp

#include <math.h>  //testing include
extern "C" {

// testing function
int int_sqrt(int x) {
  return sqrt(x);
}

}// extern c 

编译

emcc -s EXPORTED_FUNCTIONS="['_int_sqrt']" InfoMedia.cpp -o InfoMedia.js

结果在InfoMedia.js@pastebin

init_fs.js

var Module = {
  'print': function(text){ 
    console.log(text) 
  },
  'preRun' : function(){
    console.log('prerun');
    FS.createPath('/', 'home/user1', true, true);
  },
  'noInitialRun': true,
};

示例.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>InfoMediaJS-Example</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">    </script>
    <script type="text/javascript" src="init_fs.js"></script>
    <script type="text/javascript" src="InfoMedia.js"></script>
    <script type="text/javascript">
        run();
    </script>
</head>
<body></body>
</html>

在 chrome preRun 中运行它后,我得到了错误。

prerun                                     init_fs.js:6
Uncaught ReferenceError: FS is not defined init_fs.js:7

另外,如果我尝试在编译时嵌入文件

emcc -s EXPORTED_FUNCTIONS="['_int_sqrt']" --embed-file gizmo.webm InfoMedia.cpp -o InfoMedia.js

我得到这个错误Uncaught TypeError: Object #<Object> has no method 'FS_createDataFile'

它在我生成的 js 文件中,位于这一行http://pastebin.com/Mu1qfG25 @ line 1460 Module['FS_createDataFile']('/', 'gizmo.webm', [26, 69, 223,....]), true, true);

FS 永远不会插入到生成的 js 文件中。所以我怎么称呼那些FS东西并不重要。我需要添加任何编译器选项来插入该库功能吗?

4

1 回答 1

2

它很简单。只需使用使用 FS 的函数,emscripten 就会自动包含它。正如您在输出文件中看到的那样,尽管 emscripten 提供的 c 库比您在生成的输出文件中看到的要多得多,但其中没有包含不必要的库函数。

为了清楚起见,只需将您的 InfoMedia.cpp 更改为:

#include <math.h>  //testing include
#include <stdio.h>
extern "C" {

// testing function
int int_sqrt(int x) {
  printf ("Decimals: %d %ld\n", 1977, 650000L);  // use FS lib functionality
  return sqrt(x);
}

}// extern c
于 2013-03-02T21:10:06.270 回答