我以前遇到过一些麻烦,更新旧代码仍然需要一个不受支持的编译器和昂贵的库到Windows上的Eclipse中带有gfortran的版本。我让它休息了一段时间,最近我采取了另一种方法,从头开始重建程序,在ubuntu机器上开发,但现在我想把它带回一台Windows机器,以便我的同事可以为它做出贡献。
状态:
原始问题:
程序在cygwin中编译(通过调用make
- 命令,使用位于此处的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
命令,可执行文件开始运行。但是,我想要一个解决方案,以便我可以将此可执行文件提供给我的同事,以便他们可以更改输入文件(位于具有可执行文件的相对路径的文件夹中)。
继续下面的评论,我尝试了下一步:
C:\cygwin\lib\lapack\cyglapack-0.dll
文件的确切路径,甚至之后重新启动也无济于事。/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命令在Windows上很好地编译(在该过程的下一步,从Eclipse运行它),我得到一个.exe文件,可以通过双击运行,如果我继续运行将其文件夹移动到另一个位置。因为这个过程是非常耗费人力的,所以要把它全部搞清楚,我在下面添加了答案,说明你必须解析到cygwin的命令才能使它工作。
供您参考:我的文件结构如下所示(在构建之后,我将.exe文件移动到一个文件夹,在Linux版本中作为Windows版本):
答案 0 :(得分:0)
我自己想出了一些东西,并提供了来自堆栈溢出的一些指针。为了让其他人帮助他们解决类似问题,我希望我的工作方法能够完整记录下来。
可以通过在cygwin中清理构建Lapack库!和本地计算机上的Blas库并将liblapack.a和libblas.a文件粘贴到makefile中引用的库文件夹来解决此问题。通过在两个命令中使用Blas的一些例程的结果静态调用Lapack来实现的错误。
这是我遵循的步骤:
C:\Cygwin\usr\src
文件夹使用cygwin中的以下命令提取这些文件:
cd /usr/src
tar -xvzf lapack.tgz
tar -xvzf blas.tgz
使用Cygwin中显示的命令构建两个库文件。编译Lapack可能需要一段时间,并且由于测试文件中的一些缺失链接,最终会导致一些错误。这些测试用于精确度工具。需要更详细地查看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
检查此存储库中包含的makefile是否正确链接到库。这些应该说/usr/src
和-static -llapack -lblas
,其他选项适用于linux编译器。