2013-07-25 44 views
0

我以前在更新舊代碼時遇到了一些麻煩,它們仍然需要一個不支持的編譯器和昂貴的庫,以便在Windows上的Eclipse中使用gfortran。我讓它休息了一段時間,最近我採取了另一種方法,從零開始重新編譯程序,在Ubuntu機器上開發,但現在我想把它帶回到Windows機器,以便我的同事可以對它做出貢獻。將fortran程序從ubuntu移植到windows的問題

狀態:

  • 程序編譯,運行,並與LAPACK給出了一個Ubuntu的計算機上,使用GCC GNU編譯器
  • Windows 7計算機,64位
  • Cygwin安裝好的結果(GNU FORTRAN)和liblapack-devel的(但是,我不使用這些,因爲我編譯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命令可執行文件開始運行。但是,我想要一個解決方案,以便我可以將此可執行文件提供給我的同事,以便他們可以更改輸入文件(位於具有可執行文件相對路徑的文件夾中)。

在下面的評論進一步說,我試了下事情:

  1. 添加的確切路徑C:\cygwin\lib\lapack\cyglapack-0.dll文件在Windows路徑甚至重新開機之後沒有幫助。
  2. 在調用庫之前向makefile添加-static,導致依賴性錯誤,因爲我使用兩個依賴相當多其他命令(DPBTRF和DPBTRS)的lapack庫命令。這些命令在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_' 和幾行更多的行說明依賴關係。
  3. 添加liblapack.a文件到src文件夾,但是編譯器總是追溯到LAPACK Cygwin中

在LAPACK的網站,你可以正常下載功能與它們的依賴關係(例如DPBTRF),但這些都是不可用了。有沒有人有另一種想法如何將這兩個函數及其依賴包括在靜態庫文件中,我可以事先編譯並添加到src-文件夾?

電流(半)修復

接下來的事情工作(有點)對我來說:下面就http://gcc.gnu.org/wiki/GfortranBuild的說明手動建立在Cygwin和闖民宅的/usr/src文件夾libblas.a和liblapack.a到makefile中的這個文件夾。更新後的makefile文件可以在這裏找到:http://thijsvandenbrande.be/phd/hamfemInstall/makefileNew

代碼編譯很好的在Windows上通過運行Cygwin的make命令(在這個過程中下一步,跑出來的Eclipse),我獲得可以運行.exe文件通過雙擊它,並保持運行,如果我把它的文件夾移動到另一個位置。由於這個過程相當耗費勞動力,所以我想在下面添加答案,說明爲了使其工作而必須解析到cygwin的命令。

爲了您的信息:我的文件結構看起來像這樣(編譯後,我謹.exe文件一個文件夾時,無論是在Linux版本的Windows版本):

  • hamfem.exe
    • input.txt中
    • NGCR_building01.txt
  • SRC
    • hamfem.f90(主文件)
    • mainprog.f90(文件,它包含從LAPACK的命令)
    • (該例程的輸出文件的空文件夾) ...(一羣其他模塊)
    • 生成文件
+0

你有沒有試過讓你的同事雙啓動(或至少VBox)的Ubuntu? –

+0

他們目前在雙引導環境(舊的Windows環境,只有一箇舊的編譯器仍然可以工作的地方)中使用以前版本的代碼,並且希望擺脫這種情況。基本上,我正在尋找一種解決方案,通過使用cygwin,不需要雙啓動/虛擬環境。 – tvandenbrande

+0

把'liblapack.a'放入src文件夾後,你對'makefile'做了什麼? –

回答

0

我想出了自己的東西,從一切指針從stackoverflow。爲了讓其他人幫助他們解決類似的問題,我希望我的工作方法能夠讓問題得到充分記錄。

這個問題可以通過在Cygwin的本地機器上清理構建Lapack庫!和Blas庫並將liblapack.a和libblas.a文件粘貼到您在makefile中引用的庫文件夾來解決。通過在兩個命令中使用Blas的一些例程的結果,靜態調用Lapack所發生的錯誤。

這是我遵循的步驟:

  1. 從網站下載的lapack.tgz和blas.tgz文件,過去他們在C:\Cygwin\usr\src文件夾
  2. 提取這些文件在Cygwin的下列命令:

    cd /usr/src 
    tar -xvzf lapack.tgz 
    tar -xvzf blas.tgz 
    
  3. 構建與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 
    
  4. 檢查包含在此存儲庫中的makefile以正確鏈接到庫。這些應該說是/usr/src-static -llapack -lblas,其他選項是針對linux編譯器的。

相關問題