基本上,我的代码在NucleoProf_init中崩溃,通过gdb的堆栈跟踪来判断,并且这是我调用的唯一函数。这个类型转换是否正确?
#include <HsFFI.h>
static char *argv[] = {"NucleoProf", "", "", 0};
static int argc = 1;
HsBool NucleoProf_init(void){
// Initialize Haskell runtime
hs_init(&argc, (char***)&argv);
return HS_BOOL_TRUE;
}
我怀疑这是我通过argv的说法,或许,ARGV的类型转换的方式,因为堆栈跟踪包含以下内容:
#3 0x00007ffff5956282 in setFullProgArgv()
from /usr/lib/ghc/libHSrts-ghc7.4.1.so
#4 0x00007ffff5956d04 in hs_init_ghc() from /usr/lib/ghc/libHSrts-ghc7.4.1.so
#5 0x00007ffff5b9ed4f in NucleoProf_init()
问:难道这就是正确的“合成”一个简单的命令行的方式?
谢谢!您的解决方案有效(尽快接受)。我不知道为什么有人会以这种方式通过... – dsign
@dsign:正如我所说,阅读文档。可能会修改'argc'的值(例如,打折“消耗的”参数),'argv'的情况可能类似。 –
下面是我可以找到的所有文档:http://www.haskell.org/ghc/docs/7.0.2/html/users_guide/ffi-ghc.html,在这个意义上它没有多少说明。显然,我错过了一些东西或者文档是错误的,因为该类型不能编译。但我同意他们很可能会尝试从argv中删除一些特殊选项。 – dsign