簡體   English   中英

我該如何解決此C代碼/ BLAS錯誤?

[英]how can i fix this c code / BLAS error?

我正在嘗試編寫使用R中的BLAS lib的ac函數(稍后將在R腳本中使用)

#include <stdio.h>
#include <R.h>
#include <R_ext/BLAS.h>

void foo(int *dimension, double *vect1, double *vect2)
{
    const int dim = dimension[0];
    const int incxy = 1;

    //swaps two vectors
    F77_NAME(dswap)(&dim,vect1,&incxy,vect2,&incxy);
}

我使用以下代碼編譯代碼:

R CMD SHLIB foo.c

我得到錯誤:

foo.o:foo.c:(.text+0x41): undefined reference to `dswap_'

我想念什么?

包含頭文件與鏈接庫不同。

我實際上對R一無所知,但經過一些搜索,發現http://cran.r-project.org/doc/manuals/R-exts.html#Creating-shared-objects指示您需要BLAS_LIBS變量-如果您不使用makefile,則看起來您只需獲取命令“ R CMD config BLAS_LIBS”的輸出,然后在命令行中包含輸出即可。 您也許也可以將其添加到PKG_LIBS變量中,但是我對R的了解還不夠。

編輯:

已將文件Makevars.win設置為包括

PKG_LIBS=$(BLAS_LIBS) 
PKG_LIBS=$(LAPAK_LIBS)

它將PKG_LIBS變量替換為LAPAK_LIBS。 用+ =代替=嘗試。

已將文件Makevars.win設置為包括

PKG_LIBS=$(BLAS_LIBS) 
PKG_LIBS=$(LAPAK_LIBS)

但是錯誤仍然存​​在。

BINGO:已添加到

"R CMD SHLIB foo.c"

來自的輸出

"R CMD config BLAS_LIBS"

"R CMD SHLIB foo.c -LC:/PROGRA~1/R/R-212~1.2/bin/i386 -lRblas"

現在可以了。

它需要鏈接到提供dswap功能的任何東西。 我想這是在R庫中。

它在這里有效(並且請忽略我的~/.R/Makevars選擇特定的CCCFLAGS ;也忽略小的空白編輯):

edd@max:/tmp$ R CMD SHLIB foo.c
gcc-4.5 -I/usr/share/R/include -fpic -O3 -g0 -Wall -pipe -pedantic -std=gnu99 \
        -c foo.c -o foo.o
gcc -shared -o foo.so foo.o -L/usr/lib64/R/lib -lR
edd@max:/tmp$ cat foo.c
#include <stdio.h>
#include <R.h>
#include <R_ext/BLAS.h>

void foo(int *dimension, double *vect1, double *vect2)
{
    const int dim = dimension[0];
    const int incxy = 1;

    //swaps two vectors
    F77_NAME(dswap)(&dim,vect1,&incxy,vect2,&incxy);
}
edd@max:/tmp$ 

Ubuntu 10.10,R,gcc等的通用軟件包。也許您的R是在靜態庫配置中本地構建的?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM