【发布时间】:2013-07-26 00:16:17
【问题描述】:
我以前在将旧代码更新为 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 命令可执行文件开始运行。但是,我想要一个解决方案,以便我可以将此可执行文件提供给我的同事,以便他们可以更改输入文件(位于具有可执行文件相对路径的文件夹中)。
在下面的 cmets 上更进一步,我尝试了接下来的事情:
- 在 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-文件夹中?
当前(半)修复
接下来的事情(有点)对我有用:按照http://gcc.gnu.org/wiki/GfortranBuild 上的说明在 Cygwin 的 /usr/src 文件夹中手动构建 libblas.a 和 liblapack.a 并在 makefile 中引用此文件夹。更新后的 makefile 可以在这里找到:http://thijsvandenbrande.be/phd/hamfemInstall/makefileNew
通过从 cygwin 运行 make 命令(过程的下一步,从 Eclipse 中运行它),代码在 Windows 上编译得很好,我得到一个 .exe 文件,可以通过双击它来运行它,如果我继续运行将其与其文件夹一起移动到另一个位置。因为这个过程非常耗费人力,所以我在下面添加了答案,说明了你必须解析到 cygwin 才能使其工作的命令。
供您参考:我的文件结构如下所示(构建后,我将 .exe 文件上移了一个文件夹,在 linux 版本中都作为 windows 版本):
- hamfem.exe
- 在
- input.txt
- NGCR_building01.txt
- 出
- (例程输出文件的空文件夹)
- 源
- hamfem.f90(主文件)
- mainprog.f90(包含来自 lapack 的命令的文件)
- ...(一堆其他模块)
- 制作文件
【问题讨论】:
-
您是否尝试过让您的同事双启动(或至少是 VBox)Ubuntu?
-
他们目前在双启动环境(旧的 windows 环境,只有旧编译器仍然可以工作的环境)中使用以前版本的代码,并希望摆脱它。所以基本上我正在寻找一个使用cygwin不需要双启动/虚拟环境的解决方案。
-
将
liblapack.a放入src 文件夹后,您对makefile做了什么? -
我删除了文件中对libdir的引用,所以基本删除了
-L$(LIBDIR)
标签: cygwin static-libraries gfortran lapack blas