我需要使用GSL(GNU lib)通过R调用下面的C代码。我遇到的问题是C代码的编译。
这是程序mean.c:
#include <stdio.h>
#include <R.h>
#include <math.h>
#include <gsl/gsl_statistics.h>
void gsl(double *x, int *n)
{
double mean = gsl_stats_mean(x, 1, n);
Rprintf("mean = %f\n", mean);
}
命令>
R CMD SHLIB mean.c
输出>
cygwin warning:
MS-DOS style path detected: C:/PROGRA~1/R/R-31~1.2/etc/i386/Makeconf
Preferred POSIX equivalent is: /cygdrive/c/PROGRA~1/R/R-31~1.2/etc/i386/Makeconf
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
gcc -m32 -shared -s -static-libgcc -o mean.dll tmp.def mean.o ipconfig -Ld:/RCompile/CRANpkg/extralibs64/local/lib/i386 -Ld:/RCompile/CRANpkg/extralibs64/local/lib -LC:/PROGRA~1/R/R-31~1.2/bin/i386 -lR
mean.o:mean.c:<.text+0x1b>: undefined references to 'gsl_stats_mean'
collect2: ld returned 1 exit status
在命令提示符下,我还将发出以下命令:
>gcc mean.c -Wall -I"C:/Program Files/GnuWin32/include/gsl" -L"C:/Program Files/GnuWin32/lib" -lgslcblas -lgsl -lm -o mean
我已经尝试了在Meal.C之间的所有其他排列,但最后总是终止编译,给出了“LD返回1退出状态”的消息。有时给出消息“R.h”-没有这样的文件或目录。
我还编辑了路径,包括GnuWin32文件夹及其组成部分。
我走的方向对吗?
任何帮助都将不胜感激,谢谢!
--安克特
最佳答案
RcppGSL package在included and fully-working package和更简单的样条曲线示例中都有工作示例。简而言之,您需要为make
和编译器提供更多信息。
但正如Martin Morgan在评论中指出的,您也没有确切的动机来解释为什么要从R调用GSL中的mean函数。。。
关于c - 在Windows上使用GSL运行C代码的编译错误将通过R调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30694753/