【发布时间】:2016-09-23 11:33:40
【问题描述】:
我用 C 写了一段代码。
你可以找到源代码here。
它利用了 blas、lapack 和 openmp 库。
我按照these instrucions 编译了 blas 和 lapack 库。
我使用这些标志告诉编译器它应该链接的库:-lblas -llapack -fopenmp。
我用的是gcc 4.9,程序可以正常运行。
最近我将 gcc 更新到 gcc 6,它显示了许多关于 blas 和 lapack 函数的隐式声明的警告消息:
src/PSIRWLS-train.c:152:17: warning: implicit declaration of function 'dgemm_' [-Wimplicit-function-declaration]
dgemm_(&trans, &trans, &(dataset.l), &ncols, &size,&factorA, KSC, &(dataset.l), miZ, &size, &factor, miKSM, &(dataset.l));
当我运行应用程序时,会出现分段错误。
我完全不知道 gcc 4.9 和 gcc 6 的区别,你知道对此有什么解释吗?
【问题讨论】:
-
指向您的代码的链接导致错误 404...您可能对cblas 和Lapacke 感兴趣,它们是 BLAS / LAPACK 的 C 接口。否则,您可能必须清除
extern dgemm_(...)。请注意,以这种方式声明 fortran 函数可能会导致可移植性问题,因为 Linux 和 W-thing 之间的命名约定发生了变化……使用 Cblas 和 Lapacke 会将这个问题(以及其他一些问题)留给这些接口的开发人员。
标签: runtime-error lapack blas gcc4.9 gcc6