c-使用Emscripten将R函数编译为JavaScript
c - Compiling R functions to JavaScript with Emscripten
我正在尝试使用Emscripten将一些用C编写的R函数编译为JavaScript。我的第一个任务是移植一个名为pf
的函数。
来源可以在这里找到。因此,我进入src目录并尝试运行:
(trunk)⚡ % emcc -s EXPORTED_FUNCTIONS="['_Rf_pf']" nmath/pf.c
warning: unresolved symbol: Rf_pbeta
warning: unresolved symbol: Rf_pchisq
warning: unresolved symbol: R_NaN
warning: unresolved symbol: R_NegInf
warning: unresolved symbol: R_PosInf
我在输出JavaScript中得到一个函数_Rf_pf
。我实际上可以调用这个函数,它会返回一个结果。但是,由于R_PosInf
和公司没有解决,它在R_P_bounds_01(x, 0., ML_POSINF);
上短路。CCD_ 5以某种方式被设置为0,从而给出奇怪的结果。因此,算法的核心没有被执行。
有人知道我如何解决这些符号并移植这个函数吗?
我可以尝试编译更多的源代码,这似乎让我有所收获:
$ emcc -s EXPORTED_FUNCTIONS="['_Rf_pf']" nmath/pf.c nmath/pbeta.c nmath/pchisq.c
warning: unresolved symbol: R_finite
warning: unresolved symbol: Rf_pgamma
warning: unresolved symbol: Rf_warning
warning: unresolved symbol: bratio
warning: unresolved symbol: gettext
warning: unresolved symbol: R_NaN
warning: unresolved symbol: R_NegInf
warning: unresolved symbol: R_PosInf
但是,这似乎把我带进了一个巨大的兔子洞。然后,我遇到了一些障碍:
$ emcc -s EXPORTED_FUNCTIONS="['_Rf_pf']" nmath/pf.c nmath/pbeta.c nmath/pchisq.c main/arithmetic.c
In file included from main/arithmetic.c:35:
include/Defn.h:201:3: error: SIZE_MAX is required for C99
# error SIZE_MAX is required for C99
^
include/Defn.h:639:9: error: unknown type name 'R_size_t'
extern0 R_size_t R_NSize INI_as(R_NSIZE);/* Size of cons cell heap */
^
include/Defn.h:640:9: error: unknown type name 'R_size_t'
extern0 R_size_t R_VSize INI_as(R_VSIZE);/* Size of the vector heap */
^
...
fatal error: too many errors emitted, stopping now [-ferror-limit=]
注意,我有CPATH设置。我不知道这是否是将编译器指向我需要的不同标头的方法:
(trunk)⚡ % echo $CPATH
gnuwin32/fixed/h/:/usr/local/Cellar/r/3.1.2_1/include/:/usr/local/Cellar/r/3.1.2_1/R.framework/Versions/3.1/Resources/include/:nmath/:include/:main/:include/R_ext
如果要使用gnuwin32/fixed/h/config.h
,则需要-DHAVE_CONFIG_H
。
https://github.com/wch/r-source/blob/trunk/src/gnuwin32/Makefile
相关文章:
- 如何在Windows中将Javascript文件编译成二进制文件
- Javascript赢得'不能在IE上编译,但可以在Chrome上运行
- ScriptEngineManager能给我它刚刚用Java编译的Javascript函数的名称吗
- 在JavaScript中编译搜索后,获取链接到函数的属性标记的Element
- 无法使用 ant 和闭包编译器编译 javascript,因为 Jquery 的 $ 是未声明的
- 为什么每个人都使用 Node.js 和 NPM 来编译 JavaScript 库
- 使用KJSCompiler编译javascript后的JSCOMPILER_PRESERVE
- Rails没有预编译javascript
- 使用requirejs编译javascript程序以删除require依赖项
- 编写CoffeeScript时,编译Javascript中不必要的return关键字
- 预编译javascript中的验证器函数
- 用Rhino在Java内部编译JavaScript
- 使用Gulp编译javascript并解析依赖项(单独的文件)
- rails 3.1中的EJS gem无法正确编译JavaScript模板
- 如何创建makefile来编译javascript
- 资产管道只编译Javascript文件
- JScript条件编译+JavaScript压缩=预处理器
- PhantomJS不会使用类定义编译JavaScript脚本
- 如何为浏览器编译javascript库?
- 调试闭包编译器编译Javascript