Я пытался часами, и это сводит меня с ума. Последняя ошибка, я получаю:Не удалось связать код c для lapack/blas: undefined reference
demo_cblas.c:(.text+0x83): undefined reference to `clapack_sgetrf'
demo_cblas.c:(.text+0xa3): undefined reference to `clapack_sgetri'
Я компиляции кода с помощью
/usr/bin/gcc -o demo_cblas demo_cblas.c -L /usr/lib64 -l :libgfortran.so.3 -L /usr/lib64 \
-llapack -L /usr/lib64 -lblas
я попробовать и без libgfortran, с различными компиляторов GCC-33, GCC-47, НКУ-48. Тест-код не от меня, а от этого форума ...
#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;
}
Я нахожусь на Suse 12.3 64 бит. В/usr/lib64 у меня есть liblapack.a liblapack.so, ... и libblas.a libblas.so, ... и libgfortran.so.3
Тот же код без функции «invertMatrix» (один используя библиотеку) компилируется отлично.
Любая идея или предложение?
Благодарим всех вас за помощь.
Вава
Что такое ': libgfortran.so.3'? Почему бы не просто «gfortran»? –
в/usr/lib64 - это только libgfortran.so.3 и не libgfortran.a или libgfortran.so. Я не понимаю, почему это так? Я также прочитал, что для этого пакета требуется этот lib, но в этом конкретном случае он ничего не меняет. – user3778776
Похоже, что у вас отсутствует какой-то пакет «dev» для libgfortran - обычно это то, что установит символическую ссылку из /usr/lib64/libgfortran.so -> libgfortran.so.3. Файл «3» обычно поступает из пакета «runtime», и если у вас нет символической ссылки, вы где-то пропускаете «dev». –