3

FSEmscripten でをどのように使用するのか疑問に思っています。wiki に記載されていることはすべて実行したと思いますが、まだUncaught ReferenceError: FS is not defined. 結果の *.js ファイルでリテラルを検索するFSと、出現はありません。存在するはずだと思いました。

ここに私がこれまでに持っているコードがあります。

InfoMedia.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,
};

example.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>

これをクロムで実行した後、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);

結果の js ファイルに FS が挿入されることはありません。だから私がその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 に答える