[英]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
選擇特定的CC
和CFLAGS
;也忽略小的空白編輯):
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.