Compilation 带有BLAS-can和x27的Fortran 77;我不知道如何编译

Compilation 带有BLAS-can和x27的Fortran 77;我不知道如何编译,compilation,blas,fortran77,Compilation,Blas,Fortran77,我试图让BLAS在FORTRAN 77程序中工作,但到目前为止我一直没有成功,我不知道如何继续进行。作为参考,我在Ubuntu12.10下做这件事 这是我试图编译的程序的代码: program blastest implicit none include 'cblas_f77.h' end 文件cblas_f77.h位于/usr/include中,在/usr/lib中既有libblas.a又有libblas.so(以及一系列其他与BLAS相关的文件) 您如何配置它以使其正常工作 到目

我试图让BLAS在FORTRAN 77程序中工作,但到目前为止我一直没有成功,我不知道如何继续进行。作为参考,我在Ubuntu12.10下做这件事

这是我试图编译的程序的代码:

program blastest
  implicit none
  include 'cblas_f77.h'

end
文件
cblas_f77.h
位于
/usr/include
中,在
/usr/lib
中既有
libblas.a
又有
libblas.so
(以及一系列其他与BLAS相关的文件)

您如何配置它以使其正常工作

到目前为止,我已经尝试了以下方法: 注意:将
-lblas
添加到任何一个选项都没有任何区别

只是
f77
,没有选项(真的没想到这会起作用,但见鬼…)

f77
使用include选项查找头文件。现在,它在没有考虑FORTRAN 77编码的情况下失败(尽管文件名),因此前六列是非空的

$ f77 blastest.f -o blastest -I/usr/include
       MAIN blastest:
    Error on line 1 of /usr/include/cblas_f77.h: nondigit in statement label field "/*   "
    Error on line 2 of /usr/include/cblas_f77.h: labeled continuation line (starts " * cbl")
    Error on line 3 of /usr/include/cblas_f77.h: labeled continuation line (starts " * Wri")
    ...
全输出:

切换到
gfortran
,以便更灵活地使用头文件中的间距:

$ gfortran blastest.f -o blastest -I/usr/include
   Warning: cblas_f77.h:9: Illegal preprocessor directive
   Warning: cblas_f77.h:10: Illegal preprocessor directive
   Warning: cblas_f77.h:12: Illegal preprocessor directive
   ...
全输出:


好的,我想我需要
-cpp
来让预处理器工作。这给出了与上面完全相同的输出。另外,如果您继续阅读,您会看到完整的输出,编译器仍然在抱怨下面有标记的延续行…

我相信您正在使用C库“cblas”。我将使用以下命令重新编译:

gfortran blastest.f -o blastest -L/usr/lib -lblas

这应该能解决所有问题。我不相信(尽管我不确定)您需要使用“include”语句。

它给出了第一个错误的变体:“blastst.f:3:error:无法打开包含的文件‘cblas_f77.h’”。再次添加include语句将使我返回到与上面相同的输出。我还应该注意,我并不特别了解我使用的BLAS化身-首先,我只想让BLAS工作,并且在我的机器上只有四个匹配的
sudo find/-name“*BLAS*.h”
:“cblas.h”,“cblas_f77.h”还有MATLAB下32/64位版本的blas.h……你有没有看过cblas_f77.h?它不是fortran。这是一个C头。在fortran源代码中包含C标头会导致错误。没有什么意外的,所以不要这样做。@eriktous:我确实看了它,但我没有滚动到足够远的地方,意识到它包含的不仅仅是
#define
指令,我认为无论源文件的语言如何,预处理器都会处理这些指令。。。关于如何让BLAS使用FORTRAN,您有什么建议吗?您不必滚动到那么远。第一行是C注释行,这在fortran中是非法的。由于BLAS是用F77编写的,您可以尝试只引用这些过程,也许可以编写一些
外部
和返回类型声明语句。@eriktous:我错误地认为预处理器也会处理这些注释。。。除此之外,我不知道如何使用
external
关键字,谷歌给了我很多噪音;你能给我看看吗?啊,你可能在预处理器上发表评论是对的。我几乎从未使用过它,所以我没有想到这一点;但正如你所说的:撇开它不谈-
外部
语句可能没有必要。(我主要处理模块过程,所以我自己不必经常使用它。我不确定外部过程何时需要它,何时不需要。)您是否尝试过简单地引用您需要的BLAS过程?您必须指定所使用函数的类型,但除此之外,您可能可以像使用任何其他外部过程一样使用它们。
gfortran blastest.f -o blastest -L/usr/lib -lblas