2013-02-08 149 views
1

我有一個32位Fortran應用程序,需要在64位ubuntu服務器上運行。我已經在32位ubuntu機器上驗證了該應用程序,並且運行正常;不過,我得到以下錯誤,當我在64位服務器上運行:64位服務器上的32位Fortran

error while loading shared libraries: libgfortran.so.3: cannot open shared object file: No such file or directory 

做一些這方面的研究,我已經試過沒有快樂如下:

  • sudo apt-get install libgfortran3:i386從而可以「T找到該軟件包
  • 手動安裝libgfortran的32位.deb軟件包(失敗, 誤差約不正確的架構)
  • 安裝getlibs並將其確定的依賴關係是什麼
  • 運行ldconfig -v其中發現libgfortran.so.3 -> libgfortran.so.3.0.0/usr/lib/x86_64-linux-gnu:下...
  • ...然後嘗試將路徑更改爲LD_LIBRARY_PATH到,它什麼也沒做(雖然我不得不說,我的知識變得非常sparce一旦我們開始談論庫路徑...)
  • 檢查IA32-庫安裝,他們所
  • 刪除並重新安裝libgfortran,然後跑dpkg --configure --pendingdpkg --path-include=/usr/lib/x86_64-linux-gnu

我想從創建一個32位的chroot遠離如果可能的話,但在這一點上我不,如果有別的做,可以讓我不必這樣做..

你們有沒有想過我能做的事情?謝謝。

+0

使用另一個編譯器不是一個選項,對吧? – horsh 2013-02-08 15:36:55

回答

0

我不確定這是我的一部分或其他事情的疏忽;但這裏有兩個步驟,即固定的一切:

  1. 運行sudo apt-get install gfortran在64位機器上,這將安裝GNU Fortran編譯器
  2. 重新編譯應用程序,在64位機器上,使用gfortran。

奇怪的是,在這一點上,我仍然無法將應用程序文件複製/粘貼到其他64位機器並運行它。相反,我首先必須在每臺機器上單獨安裝gfortran,即使我不打算編譯任何東西。一旦安裝了gfortran,應用程序就會運行,無論它在哪裏編譯......我推測libgfortran3一定是一些依賴...

+0

當然,您需要所有機器上的運行時庫。如果你想避免這種情況,靜態編譯。 – 2013-02-08 17:53:50

+0

當然,如果你重新編譯,事情應該工作。我想,你想運行一個32位Fortran程序*而不用重新編譯它。正如弗拉基米爾指出的那樣,你可以靜態鏈接你的應用程序(使用'-static'標誌),那麼它就沒有庫依賴關係,你應該可以在你所有的機器上運行它。 – 2013-02-08 19:04:03

+0

對,這部分是有道理的。我感到困惑的是,我的一半機器(32位機器)不需要我安裝gfortran,我只能運行外部應用程序(即未在該機器上編譯的應用程序)。在64位機器上,這不起作用,我不得不單獨安裝gfortran來運行外部應用程序(不需要編譯)。我想我預計兩個版本的Ubuntu都會安裝相同的軟件包,而不管它是32位還是64位。 – nodapic 2013-02-10 15:30:52

0

嘗試安裝軟件包lib32gfortran3,因爲那樣會安裝32位版本的libgfortran庫。在開始程序之前,您最終可能需要設置LD_LIBRARY_PATH="/usr/lib32:",但可能在沒有此項的情況下運行。

相關問題