2014-10-29 8 views
0

정의되지 않은 참조됩니다 내가 GCC와 함께이 컴파일 this question는 LAPACK을 C 코드를 연결 실패 : 나는 여기 <p>C.</p>에서 LAPACK 기능을 사용하려고

#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 -o test test.c \ 
    -lblas -llapack -lf2c 

주의 : 나는 또한 등 latlas, lcblas, lgfortran,

같은 다른 libs와 시도했습니다, 다양한 계층에서 해당 라이브러리를 시도했습니다 3,691,363,210

오류 메시지는 다음

/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를 설치하면 자동으로 atlas가 제거되어 clapack.h가 제거됩니다.

그래서, 이것은 어떤 종류의 의존성 지옥처럼 느껴집니다.

저는 FreeBSD 10 amd64를 사용하고 있으며 모든 관련 라이브러리가 설치되어있는 것으로 보입니다.

도움을 주시면 감사하겠습니다.

감사

이반

+0

나는 그 질문을 읽었다. obvs - 필자는 그것에 링크했다. 나는 그것이 중복 된 것으로 생각하지 않으며, 다른 질문은 적절하게 답변되지 않았다. –

+0

중복 질문에 대한 답변에서 제안을 시도한 것처럼 보이지 않습니다. 즉, 명령 줄에'-lcblas '를 추가 하시겠습니까? (오, 내 잘못, 나는 단지 당신의 질문을 더 신중하게 읽었고 결국 libcblas에 대해서 언급했다 - 도움이되지 않았는가?). 어쨌든 나는 가까운 투표를 철회했습니다. –

+0

감사합니다 :) 내 부분에 대해, 나는 오늘 아침에 이것에 대해 좀 더 연구했고, 오류 메시지 뒤에 몇 가지 세부 사항을 추가했습니다. –

답변

0

내가 원격으로 관련 모든 --- BLAS, cblas, LAPACK, 아틀라스 등 --- 다음 (포트)에서지도 책을 다시 설치 만하고 LAPACK 및 BLAS를 제거 패키지.

이번에는/usr/local/lib에 새로운 lib 파일 libcblas.so가 포함되어 있습니다. 이전의 무작위 설치에서는 삭제해야합니다. 컴파일

gcc에 라인은 지금 :

gcc -o test test.c \ 
-llapack -lblas -lalapack -lcblas 

어떤 변화를하지 않는 것 -l 인수의 순서를 변경.

관련 문제