Windowsでは、EXEおよびDLLには、少なくとも次のフィールドを含むバージョン情報があります。
- ファイルバージョン
- 製品バージョン
- 内部名
- 商品名
- 著作権
Linuxライブラリ/実行可能ファイル:
- どのフィールドが存在しますか?
- そのような情報を表示するには?
- 読むべきツール/ライブラリは何ですか?
/sbin/ldconfig -p
Windowsでは、EXEおよびDLLには、少なくとも次のフィールドを含むバージョン情報があります。
Linuxライブラリ/実行可能ファイル:
/sbin/ldconfig -p
回答:
バージョン情報は、ELFファイルに明示的に保存されていません。そこにあるのは図書館の名前、soname
。これには、メジャーバージョンが含まれています。通常、フルバージョンはライブラリファイル名の一部として保存されます。
ライブラリがある場合、たとえばlibtest.so
、次のようになります。
libtest.so.1.0.1
-完全版を含むライブラリファイル自体libtest.so.1
-へのシンボリックリンクとlibtest.so.1.0.1
同じ名前soname
libtest.so
- libtest.so.1
リンクに使用されるシンボリックリンク。ライブラリファイルlibtest.so.1.0.1
にはSONAME
、ダイナミックセクションで呼び出されるエントリがありますlibtest.so.1
。つまり、このライブラリはと呼ばれます。このライブラリに対してプログラムをリンクすると、リンクされたプログラムは動的セクションのエントリのsoname
下にライブラリのを保存しNEEDED
ます。
どのELFファイルに何が含まれているかを確認したい場合は、次を実行してください。
readelf -a -W elffile
where elffile
は、実行可能ファイルのライブラリのいずれかです。
ライブラリバージョンを取得するだけの場合は、次の操作を実行できます。
readelf -d /path/to/library.so |grep SONAME
私の知る限り、実行可能ファイルにはそのような情報はありません(少なくともデフォルトではありません)。
または、Rahul Patilが書いたように、プログラム自体またはパッケージングシステムに依存できます。
を使用することldconfig -v | grep libraryname
も、コマンドにオプションがあるcommand -V
か、binaryfile --version
例:
test@ubuntukrb12:~# ls --version
ls (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
また、使用しているディストリビューションに基づいてyumまたはaptitudeを使用できます。
RHEL5 / CENTOS5 / Fedoraでは使用できますがyum info packagename
、インストールされている場合は使用しますrpm --version packagename
[root@ldap1 ~]# yum info bind97
Loaded plugins: downloadonly, fastestmirror, security
Loading mirror speeds from cached hostfile
* base: mirrors.sin3.sg.voxel.net
* epel: mirror.imt-systems.com
* extras: mirrors.sin3.sg.voxel.net
* updates: mirrors.sin3.sg.voxel.net
Installed Packages
Name : bind97
Arch : i386
Epoch : 32
Version : 9.7.0
Release : 10.P2.el5_8.4
Size : 6.3 M
Repo : installed
Summary : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
URL : http://www.isc.org/products/BIND/
License : ISC
Description: BIND (Berkeley Internet Name Domain) is an implementation of the DNS
: (Domain Name System) protocols. BIND includes a DNS server (named),
: which resolves host names to IP addresses; a resolver library
: (routines for applications to use when interfacing with DNS); and
: tools for verifying that the DNS server is operating properly.
Ubuntuでは、aptitude show pkgname
またはdpkg --version pkgname
root@ubuntukrb12:~# aptitude show bind9utils
Package: bind9utils
State: installed
Automatically installed: yes
Version: 1:9.8.1.dfsg.P1-4ubuntu0.4
Priority: optional
Section: net
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Uncompressed Size: 306 k
Depends: libbind9-80, libc6 (>= 2.14), libdns81, libisc83, libisccc80, libisccfg82
Conflicts: bind9utils
Replaces: bind9 (<= 1:9.5.0~b2-1), bind9 (<= 1:9.5.0~b2-1)
Description: Utilities for BIND
This package provides various utilities that are useful for maintaining a working BIND installation.
rpm
、rpm --query pkgname
バージョン文字列をリストしたいと思うと思います(それ自体rpm --version
のバージョンを出力しrpm
ます。同じことが当てはまるかもしれませんdpkg
)
Redhatベースのシステムの場合、これを行います。
ldd [file you want to run] | > needed-packages
必要なパッケージファイルをチェックアウトし、ライブラリファイル名にパス名がないことを確認します。削除する場合は、「/ bin / lib / libx.so.1」を「libx.so.1」に変更します
ライブラリが含まれるパッケージを調べる
yum -y provides [lib name]
または、これをスクリプトに入れるか、cmd行から実行します。
for lib in `cat libs.txt`;
do
yum -y provides $lib | head -2 | grep " : " >> packages.list
done
次に、次のスクリプトを作成するか、cmd行から実行します。
for package in `cat packages.list | awk '{ print $1 }'`;
do
yum -y install $package
done
完了です。プログラムを実行してください。実行中にGUIエラーが表示される場合。それらをコピーし、それらがライブラリ参照である場合、それらのパッケージを見つけて同じ方法でインストールします。