web-dev-qa-db-ja.com

lddは私のアプリが「動的実行可能ファイルではない」と言っています

天文学の教授から受け取った32ビットアプリケーション(uclsyn)を持っています。 1年前にCentOSで実行することに成功しましたが、今は新しいCentOS VMをセットアップしているときに実行されず、その理由を理解できません。 「Kill​​ed」で戻ってきます。

これはコマンドラインでの交換です:

$ ./uclsyn_linux
Killed

$ ldd ./uclsyn_linux
not a dynamic executable

$ file ./uclsyn_linux
uclsyn_linux: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

実行されているマシンでは、「ldd ./uclsyn_linux」は依存関係の完全なリストを返します。これらの共有ライブラリを提供するパッケージを見つけましたが、すべてインストールされているようです。

必要なパッケージ

  • libSM-1.1.0-7.1.el6.i686
  • libX11-1.3-2.el6.i686
  • libgcc-4.4.6-3.el6.i386
  • glibc-2.12-1.47.el6_2.9.i686
  • libuuid-2.17.2-12.4.el6.i686
  • libXau-1.0.5-1.el6.i686
  • チェックしたアプリケーションにローカルなライブラリのヒープもあり、すでにインストールされています。

私の環境

VirtualBoxで動作するCentOS

uname -a:Linux localhost.localdomain 2.6.32-358.el6.i686#1 SMP Thu Feb 21 12:50:49 UTC 2013 i686 i686 i386 GNU/Linux

20
Carl

ここでのエラーは、VirtualMachineでRAM=が不足していることが原因でした。実行中のstrace ./programnameは、ライブラリがロードされる前に、プログラムが実行を開始した直後に強制終了されていたことを示しています。 RAM利用可能な量を増やすことで、プログラムが確実に機能するようになりました。

便利な回答

他のユーザー、つまり各ライブラリが存在することを確認するための有用なコマンドを提供する@slmと、straceコマンドを試すよう提案する@lgeorgetから、いくつかの有用な応答がありました。

8
Carl

私は32ビットのバイナリに問題がありました、解決策は次のとおりです:

apt-get install gcc-multilib

$ uname -a
Linux bla 2.6.32-028stab094.3 #1 SMP Thu Sep 22 12:47:37 MSD 2011 x86_64 GNU/Linux
14
lama12345

答えはあなたの質問です:あなたは1年前にGNU/Linux用にコンパイルされたアプリケーションを実行しようとし、互換性がなくなったり、利用できなくなったりする可能性がある新しいライブラリーでそれを実行しようとします。

この時点で、2つの選択肢があります。それを再コンパイルできる場合(疑わしい、あなたのケースをよく理解しているとしたら)、互換性のあるライブラリと再リンクされるため、実行できます。それ以外の場合は、VM古いバージョンのGNUライブラリで実行するなど)を実行して、アプリケーションを実行するようなサンドボックスの構築を試みることができます。

2
lgeorget

Arch Linuxで、ファイルが32ビットelfの場合、lib32-gcc-libs(multilibリポジトリから)をインストールして問題を解決できます。

0
Ashark

readelf -l uclsyn_linuxプログラムインタープリターを要求すると、不足しているものがわかります。

0
netawater