2014-04-15 80 views
0

C函數我想的R函數中換到的這些C函數任一項的調用:調用來自R

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' 

難道是我造成這種情況的(void *)嗎?它不被我的plattform(OSX)上的底層函數使用。

任何想法?

回答

0

.Call()接口需要並返回SEXP對象,所以你的接口是錯誤的。 您可以嘗試較舊的.C(),但不鼓勵新項目。請注意,您還需要在那裏轉換您的功能 - 也許有時間重新訪問Writing R Extensions中的一些示例?