하나의 문제는 -L
옵션은 후 '디렉토리의 이름을 기대하는 수, 따라서 gcc
(또는 gcc
에 의해 호출 링커) 디렉토리로 -lgoto2.a
을 치료한다. 컴파일러는 존재하지 않는 디렉토리에 대해 불평하지 않습니다. 그것은 단순히 그들을 무시합니다. 라이브러리를 찾을 디렉토리는 어느 디렉토리입니까? (이 대답의 목적을 위해, 나는 그것이 /usr/local/lib
에 있다고 가정 할 것이다.)
또 다른 문제는 라이브러리가 libgoto2.a.a 또는 libgoto2.a.so 또는 비슷한 것으로 불리지 않을 수 있다는 것입니다. 일반적으로 .a
접미사를 지정하지 않습니다. 이 대답의 목적을 위해 라이브러리는 libgoto2.a 또는 libgoto2.so라고 가정합니다.
헤더가있는 위치를 지정할 필요가없는 것으로 보입니다. 이는 컴파일러가 어쨌든 거기서 보게되는 충분히 전통적인 위치에 있음을 의미합니다. 그게 맞다면 라이브러리도 충분히 전통적인 위치에있을 수 있고, -L
옵션은 불필요 할 수 있습니다.
그래서, 당신은 사용할 수 있습니다
gcc -Wall -o outputprog main.c -lgoto2
을 또는 당신은 사용할 필요가 있습니다
gcc -Wall -o outputprog main.c -L/usr/local/lib -lgoto2
을 코멘트에 일부 광범위한 토론 후, 그리고 정보가 라이브러리가 현재 디렉토리에 있고 이름이 libgoto2.a
이고 심볼 dgemm
이 여전히 누락 된 경우 GotoBLAS2 version 1.13을 다운로드하고 semi-sup로 컴파일하려고했습니다. (MacOS X, 아마도 리눅스 인 척하면서 x86_64 아키텍처). 빌드가 성공적이지 못했습니다. 일부 어셈블러 코드의 문제. 그러나, 헤더에 주위 파고, 문제의 해결책을 제공과 같은 것이있다 : 많은 다른 함수 정의 사이에,이에
cblas.h
, 우리는 찾을 수 :
void cblas_dgemm(enum CBLAS_ORDER Order, enum CBLAS_TRANSPOSE TransA,
enum CBLAS_TRANSPOSE TransB, blasint M, blasint N, blasint K,
double alpha, double *A, blasint lda, double *B, blasint ldb,
double beta, double *C, blasint ldc);
모든 기능을 헤더의 기호 앞에 cblas_
이 붙습니다.귀하의 코드가 사용되어야합니다 :
#include "cblas.h"
당신은
cblas_
접두사 (소문자) 포트란 이름을 사용하여 함수를 호출해야
:
cblas_dgemm(...);
그리고 사용할 올바른 링크 라인은 첫 번째 옵션이다 핀치에서
gcc -Wall -o outputprog main.c -lgoto2
, 당신은 매크로를 정의 할 수 있습니다 : 위에 나열된 올바른 C 함수 이름으로 일반 (접두어가) 이름을 매핑,하지만 난 그것을 가치가 확신 아니에요 그것은 :
#define DGEMM cblas_dgemm
또는 (안전, 그것은 인수 목록의 길이하지만, 더 자세한 정보를 확인하기 때문에) :
DGEMM(a, ..., n);
을 올바른 함수가 호출 될 것이다 :
#define DGEMM(a,b,c,d,e,f,g,h,i,j,k,l,m,n) cblas_dgemm(a,b,c,d,e,f,g,h,i,j,k,l,m,n)
그런 다음 쓸 수 있습니다. GotoBLAS2의 부분적으로 성공적으로 빌드
실험은 위에서 언급 한 것을 보여줍니다
cblas.h
은 자체에 포함 된 (좋은 코딩 표준에 반하는)이 아니다.
common.h
을 포함해야합니다.
common.h
다른 헤더를 많이 포함
- config.h 파일을
- common_x86_64.h
- param.h
- common_param.h
- common_interface.h
- common_macro.h
- common_s.h
- common_d.h
,515,
- common_q.h
- common_c.h
- common_z.h
- common_x.h
- common_level1.h
- common_level2.h
- common_level3.h
- common_lapack.h
다음 코드는 전체 lib와 링크 할 수있는 기회를 제공합니다 rary :
#include "common.h"
#include "cblas.h"
void check_dgemm(void)
{
double A[33] = { 0.0 };
double B[33] = { 0.0 };
double C[33] = { 0.0 };
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
3, 3, 3, 2.0, A, 3, B, 3, 3.0, C, 3);
}
int main(void)
{
check_dgemm();
return 0;
}
이 (도서관 내 틀림없이 깨진 빌드에서 불만되는 것을 갔다는없는 다른 기능의 번호로 'cblas_dgemm()
을 찾을 수 없습니다'.이 광대 한 개선이다!) 내가 볼 수)까지 웹 사이트에 나열되지 않은 목록 https://lists.tacc.utexas.edu/mailman/listinfo/gotoblas을 (메일 링 GotoBLAS에 대한 답을 찾을 수 있었다
찾은 BLAS 가이드의 URL을 게시하면 도움이됩니다. 겸손하게 광범위한 Google 검색은 매뉴얼에 대한 유용한 위치 (또는 실제로 힌트)를 보여주지 못했습니다. –
가이드 링크는 다음과 같습니다. http://www.netlib.org/blas/blasqr.pdf 기능의 목록 일뿐 사용 방법은 아닙니다. – CHP