我想在R函数中包含对这些C函数中的任何一个的调用:
char *sendpraat (void *display, const char *programName, long timeOut, const char *text);
wchar_t *sendpraatW (void *display, const wchar_t *programName, long timeOut, const wchar_t *text);
我可以很好地构建源代码:
$ R CMD SHLIB -o pRaat.so sendpraat.c
clang -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/include - fPIC -mtune=core2 -g -O2 -c sendpraat.c -o sendpraat.o
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module - multiply_defined suppress -L/usr/local/lib -L/usr/local/lib -o pRaat.so sendpraat.o - F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
但是当我调用加载的函数时,我导致R崩溃:
dyn.load("pRaat.so")
.Call("sendpraat",
as.integer(1),
as.character("Praat"),
as.integer(0),
as.character("Create Sound as pure tone... tone 1 0 0.4 44100 440 0.2 0.01 0.01"),
PACKAGE="pRaat")
*** caught segfault ***
address 0x0, cause 'unknown'
我是sypply导致这种情况的(void *)吗?我的平台(OSX)上的底层函数没有使用它。
有什么想法吗?
答案 0 :(得分:0)
.Call()
接口接收并返回SEXP
个对象,因此您的接口错误。
您可以尝试使用较旧的.C()
,但不鼓励新项目。请注意,您还需要转换您的函数 - 也许是时候重新审视Writing R Extensions中的一些示例了?