我想使用LAPACK函数从C未能链接C代码LAPACK:未定义参考
下面是一些测试代码,从this question
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "clapack.h"
#include "cblas.h"
void invertMatrix(float *a, unsigned int height){
int info, ipiv[height];
info = clapack_sgetrf(CblasColMajor, height, height, a, height, ipiv);
info = clapack_sgetri(CblasColMajor, height, a, height, ipiv);
}
void displayMatrix(float *a, unsigned int height, unsigned int width)
{
int i, j;
for(i = 0; i < height; i++){
for(j = 0; j < width; j++)
{
printf("%1.3f ", a[height*j + i]);
}
printf("\n");
}
printf("\n");
}
int main(int argc, char *argv[])
{
int i;
float a[9], b[9], c[9];
srand(time(NULL));
for(i = 0; i < 9; i++)
{
a[i] = 1.0f*rand()/RAND_MAX;
b[i] = a[i];
}
displayMatrix(a, 3, 3);
return 0;
}
我编译这个用gcc复制:
gcc -o test test.c \
-lblas -llapack -lf2c
注:我已经试过各种顺序这些库,我也尝试过其他类似的库latlas,lcblas,lgfortran等
的错误信息是:
/tmp//cc8JMnRT.o: In function `invertMatrix':
test.c:(.text+0x94): undefined reference to `clapack_sgetrf'
test.c:(.text+0xb4): undefined reference to `clapack_sgetri'
collect2: error: ld returned 1 exit status
clapack.h被发现,包括:(安装为图谱的一部分)。 clapack.h包含有问题的功能---所以不能找到它们?
符号实际上在库libalapack中(使用strings
找到)。但是,向gcc命令添加-lalapack似乎需要添加-lcblas(大量未定义的cblas_ *引用)。安装cblas会自动卸载地图集,这会删除clapack.h。
所以,这感觉就像某种依赖性地狱。
我在FreeBSD 10 amd64上,所有相关的库似乎都安装在正确的路径上。
任何帮助非常感谢。
感谢
伊万
我已经读过这个问题obvs - 请注意我链接到它。我不认为这是重复的,而另一个问题没有得到充分的回答。 – 2014-10-30 09:23:34
它看起来并不像你已经在重复问题的答案中尝试了建议,即将'-lcblas'添加到命令行? (哦,我的不好,我只是更仔细地重新阅读你的问题,毕竟你提到libcblas--这没有帮助吗?)。无论如何,我已经收回了我的近距离投票。 – 2014-10-30 09:25:53
谢谢:)对于我而言,今天早上我做了一些更多的工作,并且在错误消息后添加了更多的细节。 – 2014-10-30 09:30:06