【问题标题】:Error in R CMD SHLIB compiling C codeR CMD SHLIB 编译 C 代码时出错
【发布时间】:2023-03-10 15:26:01
【问题描述】:

我正在尝试将 R CMD SHLIB 用于使用 LapackBlas 编写的 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_'

【问题讨论】:

    标签: c r cmd


    【解决方案1】:

    您有 linker 错误,而不是 compiler 错误。编译步骤顺利通过。

    解决方案:告诉 R 链接到丢失的库,最常见的方法是添加一个文件 src/Makevars.win,其中包含以下内容:

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

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

    【讨论】:

    • 所以我确实将这一行添加到 R 目录下的 Makevars.win 中。但是,它给了我同样的错误。我需要在命令提示符中执行另一行来链接吗?我需要在某处放置/下载这些库吗?
    • 它必须是src 目录中的文件Makevars.win,如我在回答中使用的速记符号src/Makevars.win 所示。您使用了错误的目录。
    • 我有两个 src 文件夹:D:/R/R-3.3.2/src/Makevars.winD:/R/R-3.3。 2/src/library/windlgs/src/Makevars.win 我把makefile放在两个文件夹里。仍然无法链接。我的“Makevars.win”有以下内容:PKG_LIBS = $(GRAPHAPP_LIB) PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
    • 不需要用粗体标记大喊大叫,无论如何我们更喜欢反引号而不是排版as code。所有你需要知道的是Writing R Extensions 手册。现在 CRAN 上有超过 10,000 个包,其中数千个使用编译源。那么为什么不阅读手册并研究现有的工作示例呢?
    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多