Cygwin 将fortran程序从ubuntu移植到windows的问题
以前,我在更新旧代码时遇到了一些问题,这些代码仍然需要一个不受支持的编译器和昂贵的库,以便在Windows上的Eclipse中使用gfortran。我让它休息了一段时间,最近我采取了一种完全不同的方法,从头开始重建程序,在ubuntu机器上开发,但现在我想把它带回到windows机器上,这样我的同事就可以对它做出贡献 现状:Cygwin 将fortran程序从ubuntu移植到windows的问题,cygwin,static-libraries,gfortran,lapack,blas,Cygwin,Static Libraries,Gfortran,Lapack,Blas,以前,我在更新旧代码时遇到了一些问题,这些代码仍然需要一个不受支持的编译器和昂贵的库,以便在Windows上的Eclipse中使用gfortran。我让它休息了一段时间,最近我采取了一种完全不同的方法,从头开始重建程序,在ubuntu机器上开发,但现在我想把它带回到windows机器上,这样我的同事就可以对它做出贡献 现状: 该程序使用GCC GNU编译器在ubuntu机器上编译、运行并给出良好的结果 Windows 7计算机,64位 使用lapack和liblapack-devel安装Cyg
- 该程序使用GCC GNU编译器在ubuntu机器上编译、运行并给出良好的结果
- Windows 7计算机,64位
- 使用lapack和liblapack-devel安装Cygwin(用于gnu fortran)(但是,我不使用它们,因为我手动编译blas和lapack)
- (C:/cygwin/lib已添加到windows路径)
make
-命令,使用位于此处的makefile调用make命令:
这将返回文件hamfem.exe,在windows中双击该文件时返回以下错误:程序无法启动,因为您的计算机中缺少cyglapack-0.dll。请尝试重新安装程序以解决此问题。
从cygwin运行可执行文件时,通过调用/hamfem.exe
命令,可执行文件开始运行。但是,我需要一个解决方案,以便我可以将此可执行文件提供给我的同事,以便他们可以更改输入文件(位于与可执行文件具有相对路径的文件夹中)
继续下面的评论,我尝试了以下几点:
C:\cygwin\lib\lapack\cyglapack-0.dll
文件中,甚至在之后重新启动也无济于事/usr/lib/gcc/i686 pc cygwin/4.7.3/../../../liblapack.a(DPBTRF.o):在函数“dpbtrf”中:
/usr/src/debug/lapack-3.4.2-1/src/dpbtrf.f:277:未定义对“dtrsm”的引用
还有几行说明依赖关系liblapack.a
文件添加到src文件夹,但编译器总是返回cygwin中的lapacksrc
-文件夹中吗
当前(半)修复
下一件事对我起了作用(有点):按照上的说明在Cygwin的/usr/src
文件夹中手动构建libblas.a和liblapack.a,并在makefile中引用此文件夹。更新的makefile可以在以下位置找到:
通过从cygwin运行make命令(过程的下一步,在Eclipse中运行它),代码在Windows上可以很好地编译我得到了一个.exe文件,可以通过双击它来运行,如果我将它和它的文件夹一起移动到另一个位置,它将继续运行。因为这个过程非常耗时,所以我在下面添加了答案,说明了为了使它工作,您必须解析cygwin的命令
供您参考:我的文件结构如下所示(生成后,我将.exe文件向上移动一个文件夹,在linux版本和windows版本中都是如此):
- hamfem.exe
- 在
- input.txt
- NGCR_building01.txt
- 出去
- (例程输出文件的空文件夹)
- src
- hamfem.f90(主文件)
- mainprog.f90(包含lapack命令的文件)
- …(一系列其他模块)
- 生成文件
C:\Cygwin\usr\src
文件夹中cd /usr/src
tar -xvzf lapack.tgz
tar -xvzf blas.tgz
make.inc
文件进行更详细的查看,以解决这些问题
cd $HOME
cd /usr/src/BLAS
make
mv blas_LINUX.a ../libblas.a
cd ../lapack-3.4.2
mv make.inc.example make.inc
make
mv liblapack.a ../liblapack.a
/usr/src
和-static-llapack-lblas
,其他选项适用于linux编译器你试过让你的同事使用双启动(或者至少是VBox)Ubuntu吗?他们目前在双启动环境中使用以前版本的代码(旧windows环境,只有旧编译器仍然工作的环境)所以基本上我正在寻找一种解决方案,使用cygwin不需要双启动/虚拟环境。在将
liblapack.a
放入src文件夹后,您对makefile
做了什么?我删除了文件中对libdir的引用,所以基本上删除了-L$(libdir)