我试图使用R CMD SHLIB编写一个使用Lapack和Blas编写的C程序。我在Windows中使用命令提示符。但它似乎无法链接到外部库。如何链接这些库?

D:\R\testR>Rcmd SHLIB fmpc.c
c:/Rtools/mingw_64/bin/gcc -shared -s -static-libgcc -o fmpc.dll tmp.def fmpc.o
-Ld:/Compiler/gcc-4.9.3/local330/lib/x64 -Ld:/Compiler/gcc-4.9.3/local330/lib -L
D:/R/R-3.3.2/bin/x64 -lR
fmpc.o:fmpc.c:(.text+0x76d): undefined reference to `dposv_'
fmpc.o:fmpc.c:(.text+0x800): undefined reference to `dtrtrs_'
fmpc.o:fmpc.c:(.text+0x83b): undefined reference to `dtrtrs_'
fmpc.o:fmpc.c:(.text+0x92f): undefined reference to `dposv_'
fmpc.o:fmpc.c:(.text+0x9bf): undefined reference to `dtrtrs_'
fmpc.o:fmpc.c:(.text+0x9fa): undefined reference to `dtrtrs_'
fmpc.o:fmpc.c:(.text+0xb19): undefined reference to `dgemm_'

最佳答案

您有一个链接器错误,而不是编译器错误。编译步骤顺利通过。
解决方案:告诉R链接缺少的库,大多数方法是添加一个文件src/Makevars.win,其中包含以下内容:

PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)

它是使用R知道的其他变量的变量声明。

08-04 15:01