2013-02-08 253 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:",但可能在没有此项的情况下运行。

相关问题