我以前在更新旧代码时遇到了一些麻烦,这些旧代码仍然需要不受支持的编译器和昂贵的库,以在 Windows 上的 Eclipse 中使用 gfortran 的版本。我让它休息了一段时间,最近我采取了另一种方法,从头开始重建程序,在 ubuntu 机器上开发,但现在我想把它带回 Windows 机器,以便我的同事可以为它做出贡献.
状态:
- 程序在带有 GCC GNU 编译器的 ubuntu 机器上编译、运行并给出良好的结果
- Windows 7 机器,64 位
- 带有 lapack 和 liblapack-devel 的 Cygwin 安装(用于 gnu fortran)(但是,我不使用这些,因为我手动编译 blas 和 lapack)
- (C:/cygwin/lib 添加到 windows 路径)
原始问题:
该程序在 cygwin 中编译(通过调用make
-command,使用位于此处的 makefile 调用 make 命令:http: //thijsvandenbrande.be/phd/hamfemInstall/makefile
这将返回文件 hamfem.exe,在 Windows 中双击运行该文件会返回以下错误:The program can't start because cyglapack-0.dll is missing from your computer. Try reinstalling the program to fix this problem.
从 cygwin 运行可执行文件时,通过调用./hamfem.exe
命令可执行文件开始运行。但是,我想要一个解决方案,以便我可以将此可执行文件提供给我的同事,以便他们可以更改输入文件(位于具有可执行文件相对路径的文件夹中)。
进一步了解下面的评论,我尝试了接下来的事情:
- 在 Windows 路径中添加文件的确切路径
C:\cygwin\lib\lapack\cyglapack-0.dll
,甚至在之后重新启动也无济于事。 - 在调用库之前向 makefile 添加 -static 会导致依赖错误,因为我使用了 lapack 库的两个命令,它们依赖于很多其他命令(DPBTRF 和 DPBTRS)。这些命令在 mainprog.f90 模块中使用。错误:
/usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../liblapack.a(dpbtrf.f.o): In function 'dpbtrf': /usr/src/debug/lapack-3.4.2-1/SRC/dpbtrf.f:277: undefined reference to 'dtrsm_'
还有几行说明依赖关系。 - 将
liblapack.a
文件添加到 src 文件夹,但编译器总是回到 cygwin 中的 lapack
在 lapack 的网站上,您通常可以下载函数及其依赖项(例如DPBTRF),但这些不再可用。有没有人知道如何将这两个函数及其依赖项包含在一个静态库文件中,我可以预先编译并添加到src
-folder 中?
当前(半)修复
接下来的事情(有点)对我有用:按照http://gcc.gnu.org/wiki/GfortranBuild/usr/src
上的说明在Cygwin 的文件夹中手动构建 libblas.a 和 liblapack.a并在生成文件。更新后的 makefile 可以在这里找到:http: //thijsvandenbrande.be/phd/hamfemInstall/makefileNew
通过从 cygwin 运行 make 命令(该过程的下一步,从 Eclipse 中运行它),代码在 Windows 上编译得很好,我得到一个 .exe 文件,可以通过双击它来运行它,如果我移动它,它会继续运行其文件夹到另一个位置。因为这个过程非常耗费人力,所以我在下面添加了答案,说明了你必须解析到 cygwin 才能使其工作的命令。
供您参考:我的文件结构如下所示(构建后,我将 .exe 文件向上移动一个文件夹,在 linux 版本中作为 windows 版本):
- 火腿肠
- 在
- 输入.txt
- NGCR_building01.txt
- 出去
- (例程输出文件的空文件夹)
- 源代码
- hamfem.f90(主文件)
- mainprog.f90(包含来自 lapack 的命令的文件)
- ...(一堆其他模块)
- 生成文件