出産前後の痔にはご注意!

CentOS 6.5にてプログラムを実行しようとしたら
/lib/libc.so.6: version `GLIBC_2.15' not found
という警告表示されて実行できないので、glibcのバージョンを確認したいところ
yum info glibc
version 2.12でした。

glibcを2.15までアップグレードするにはどうすればよろしいでしょうか。
多少のLinuxの操作は分かりますが、詳しくないため教えていただけないでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

どちらかというと、そのソフトが


2.12では動かないソフトなのか?
というところから確認すべきかもしれませんね。

CentOSやUbuntuなどの現在のLinuxディストリビューションでは
リポジトリーにあるソフトを使う前提で
ライブラリーなどのバージョンの整合性が得られるようになっています。

ですから、その外からソフトを持ち込むことが
想定外の運用ということになります。

ですから、リポジトリーにあるソフトを使うことが基本で
それより新しいバージョンを利用したければ
新しいバージョンのソースを入手し、手元でmakeを試みるのが第一の対策です。

これができないことはありますが、それでも、小さな修正で対処できる場合もあります。


もちろん、必要なライブラリーを入れていくという手もありますが
むしろライブラリーを手作業で追加するほうが、大きな手間がかかり
また、トラブル要因としても、より大きなものになる可能性があります。


最新志向であれば、Fedoraを半年ごとに更新して使う手もありますし
Arch Linuxのようなものを使う手もあります。
    • good
    • 0

> CentOS 6.5にてプログラムを実行しようとしたら・・・



何のプログラムなのか書いてありませんが、
CentOS 6.5で glibc 2.15 にするのは困難でしょう。
たとえばfedora-EPELに存在すればCentOSにもインストールできますが、
fedora-EPELのglibcも2.12です。
fedora17からglibcを2.15になります。
---
CentOSは開発環境が古いので、あたらしいプログラムには対応していないので、
どうしてもそのプログラムを使用しなければならないのなら、
fedora20(fedora17以降)をインストールして試してはどうでしょうか。
    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qglibcバージョンアップ

RedHat2.1の環境でglibcを2.3以上にアップデートを行ってます。
ただし、アップデートできません。
RedHat4にあったGlibcらしきPRMを走らせたら下記のようになりました。
2.3へのアップデートの方法をご存知の方がいたら教えて下さい。
もしくはRPMがダウンロードできるサイトがあれば教えて下さい。

[root@test01 Redhut4 glib]# rpm -ivh glibc-2.3.4-2.i386.rpm
エラー: 依存性の欠如:
glibc-common = 2.3.4-2は glibc-2.3.4-2 に必要とされています
shadow-utils < 2:4.0.3-20 glibc-2.3.4-2 と競合します
nscd < 2.3.3-52 glibc-2.3.4-2 と競合します
glibc > 2.2.4 glibc-common-2.2.4-32.18 と競合します

Aベストアンサー

度々すみません。なんとか、redhat-7.3で、glibc-2.3.2のインストールができました。
インストールには、Linux From Scratch のドキュメント(参考URL)が役にたちました。

(0) 必要なソース、パッチの準備
ftpサイト(ftp://ftp.kddlabs.co.jp/GNU/ など)から、binutils-2.14.tar.gz, gcc-core-3.3.1.tar.gz, glibc-2.3.2.tar.gz , glibc-linuxthreads-2.3.2.tar.gz を入手。
さらに、glibcのパッチを http://www.linuxfromscratch.org/patches/lfs/5.0/glibc-2.3.2-sscanf-1.patch から入手。

(1) binutilsを /usr/local にインストール
tar zxvf binutils-2.14.tar.gz
cd binutils-2.14
./configure --prefix=/usr/local
make && make install
cd ..

(2) gccを /usr/local にインストール
tar zxvf gcc-core-3.3.1.tar.gz
mkdir gcc-build
cd gcc-build
../gcc-3.3.1/configure --prefix=/usr/local --enable-languages=c
make && make install
cd ..

(3) glibcを /usr/local/glibc232 にインストール
tar zxvf glibc-2.3.2.tar.gz
cd glibc-2.3.2
patch -p1 < ../glibc-2.3.2-sscanf-1.patch
tar zxvf ../glibc-linuxthreads-2.3.2.tar.gz
cd ..
mkdir glibc-build
cd glibc-build
../glibc-2.3.2/configure --prefix=/usr/local/glibc232 --enable-add-ons
make && make install

これで、/usr/local/glibc232 以下に glibc-2.3.2がインストールされます。
http://www.gnu.org/software/libc/FAQ.html#s-3.18 によれば、動的にLD_LIBRARY_PATHを指定して、新しい ld-linux.so.2 の引数に動作させたいバイナリを指定して実行できます。
例えば私の環境では、以下のようにして redhat-9からコピーした ls が実行できました。

$ ls
cat ls tar (← redhat-9からコピーしたバイナリ)

$ ./ls
./ls: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./ls)

GLIBCのバージョンエラー。LD_LIBRARY_PATHを設定し、glibc-2.3のld-linux.soを使って実行してみる。

$ LD_LIBRARY_PATH=/usr/local/glibc232/lib /usr/local/glibc232/lib/ld-linux.so.2 ./ls
./ls: error while loading shared libraries: libtermcap.so.2: cannot open shared object file: No such file or directory

今度はtermcapライブラリが見つからないので、lddコマンドで、必要とされるライブラリを調べる。

$ ldd ls
./ls: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./ls)
libtermcap.so.2 => /lib/libtermcap.so.2 (0x4001c000)
libc.so.6 => /lib/i686/libc.so.6 (0x42000000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

/lib/libtermcap.so.2 が必要だとわかったので、LD_LIBRARY_PATHに /lib を追加して再度トライ

$ LD_LIBRARY_PATH=/usr/local/glibc232/lib:/lib /usr/local/glibc232/lib/ld-linux.so.2 ./ls
cat ls tar

動いた! ということで、私にとっても、凄く勉強になりましたです。ハイ。

参考URL:http://www.linux.or.jp/JF/JFdocs/LFS-BOOK/index.html

度々すみません。なんとか、redhat-7.3で、glibc-2.3.2のインストールができました。
インストールには、Linux From Scratch のドキュメント(参考URL)が役にたちました。

(0) 必要なソース、パッチの準備
ftpサイト(ftp://ftp.kddlabs.co.jp/GNU/ など)から、binutils-2.14.tar.gz, gcc-core-3.3.1.tar.gz, glibc-2.3.2.tar.gz , glibc-linuxthreads-2.3.2.tar.gz を入手。
さらに、glibcのパッチを http://www.linuxfromscratch.org/patches/lfs/5.0/glibc-2.3.2-sscanf-1.patch から入手。

(1) bin...続きを読む

Qglibcのアップグレード

redhat9を使っているのですが、glibcのバージョンをあげようと思い、次のサイトを参考にrpmパッケージをインストールしました。
http://www.atmarkit.co.jp/flinux/rensai/lfs03/lfs03b.html
無事、インストールが終わったのですがバージョンが、2.3.2のままで、2.3.2-27.9.7になりませんでした。
ls -l /lib/libc-*
と打ち込んでも2.3.2.soと表示されます。
何がまずかったのかわかりません。rpmパッケージをインストールしたのがまずかったのでしょうか。それとも、まだ何かすることをしていないだけなのでしょうか。
自己解決できなかったので、どなたか、ご教授願います。
よろしくお願いいたします。

Aベストアンサー

さすがに、私もそこまで時間とって、調査するだけの暇人じゃないし、redhat9なんてもう構成すら忘れているので、ヒントだけ。

まずは、glibcの2.3.2と2.3.3の差分と2.3.3と2.3.4の差分を見て下さい。
中にあるFAQやreadmeなどを読んで下さい。
そうすれば、そもそもredhat9の環境に入れられるものなのかがわかります。
ダメなら、何がダメなのか。別のパッケージをバージョンアップすれば済むのか。
など、順を追っていく必要があります。

glibcはOSの根幹なので、根が深いと大変な作業になりますが、成功されることを祈ってます。

QLD_LIBRARY_PATHって?

環境変数で「LD_LIBRARY_PATH」というのがあるかと思うのですが、この変数はOSが使用する変数なのでしょうか?それとも単一、あるいは複数のアプリケーションソフト(ORACLEなどのような)が使用する変数なのでしょうか?
基本的な質問で申し訳ありませんが、教えてください。

Aベストアンサー

OSが使用する変数です。リンク時または実行時にリンクする共有ライブラリを探すために使用されます。

LD_LIBRARY_PATHが設定されていない場合、ダイナミックローダーは/libや/usr/lib等に存在するライブラリを検索しますが、それ以外の場所に存在するライブラリを見つける事ができません。

実行プログラムが32ビットの場合はLD_LIBRARY_PATHが、64ビットの場合でLD_LIBRARY_PATH_64が設定されている場合はこちらが使用されます。

なお、リンク時パスや実行時パスはコンパイル時に設定することもできます。

Qシェルスクリプトでファイル内の数値文字列を数値として扱うには

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。

Aベストアンサー

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをe...続きを読む

QLinux CentOS6.3 aptインストール

先日CentOS 6.3 Final (kernel-2.6.32-279.11.1.el6.i686)を
ノートPCにインストールしました
yum仕様だったのでUbuntu等で使っていたapt-getコマンドをインストールしようとしたら
(管理権限)
# yum install apt
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
Setting up Install Process
No package apt available.
Error: Nothing to do
と出ました。どうすればaptをインストールできるでしょうか?
追加するリポジトリなど必要なことがあれば教えていただきたいです

Aベストアンサー

質問者さんは、別なことを質問しているのではないかと思います。
違っていればパスしてください。

Debian系の、
apt
Redhat系の、
yum
進化してきたので、以前のFedora Core3の時代は、aptとyumが併用できたのかは当方は検証したことがないので分からないが、Fedora Core3は、2004年頃のURLを参考にしてもだめだと思う。

Debian系は、
rpmパッケージをalienコマンドで、deb形式に変換して、dpkgコマンドで、deb形式を取り込めるというワンクッション必要ですね。
このことはご存知ですね。
これを行なえば、一般のrpmパッケージも、簡単にシステムに組み入れることができます。
こうした手続きを質問者さんは、聞いているのかもしれませんね。
CentOSだから、この逆のことを行なえばよいと思います。
基本的には、一般公開されているのは、rpm形式なので、上記のことしかWEB上にはないかもしれません。
逆の場合は、
Debian系のマシンで、deb形式のパッケージを下記のコマンドで、rpm形式のパッケージとして出力させることはできます。
alien -r xxxx.deb
詳細は、
man alien
で調査してください。

質問者さんの質問内容から、独断と偏見で曲げて解釈しています。
間違っていたら、パスされたし。

質問者さんは、別なことを質問しているのではないかと思います。
違っていればパスしてください。

Debian系の、
apt
Redhat系の、
yum
進化してきたので、以前のFedora Core3の時代は、aptとyumが併用できたのかは当方は検証したことがないので分からないが、Fedora Core3は、2004年頃のURLを参考にしてもだめだと思う。

Debian系は、
rpmパッケージをalienコマンドで、deb形式に変換して、dpkgコマンドで、deb形式を取り込めるというワンクッション必要ですね。
このことはご存知ですね。
これを行なえば、一般...続きを読む

Qapt-get install ****** でinstallしたものをuninstallするには?

御世話になります。
vncserverだけをinstallするつもりが
誤って
apt-get install vncとうってしまいました。
これをuninstallしたいのですが
どのようにすればよろしいでしょうか?

教えて下さい。

Aベストアンサー

# apt-get remove パッケージ名
では、設定ファイルは削除されずに残ります。

完全に削除するときは、
# apt-get --purge remove パッケージ名
です。

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

QLinux バイナリ実行できない "cannot execute binary file”

表記ですが、Linuxサーバーに対して、Windowsクライアントから
XWin環境にてユーザー"hoge"でログインを行い、
そのサーバー上でターミナルを立ち上げ
/usr/local/gcc_work
というフォルダを作り、その中で

---ここからーーー
#include <stdio.h>
int main(void)
{
printf("Hello,world\n");
return 1;
}
ーーーここまでーーー

のような、hello.cを作成し、

$ gcc -c hello.c -o hello
でバイナリを作成し

$ ./hello
とすると
bash: ./hello: cannot execute binary file

とのメッセージが出ます。
パーミッションの問題かと思いましたが、
[hoge@localhost gcc_work]$ ls -l
合計 8
-rwxrwxr-x 1 hoge hoge 876 5月 6 18:14 hello
-rwxrwxr-x 1 hoge hoge 83 5月 6 18:13 hello.c

のようになっていて、問題なく感じています。
スーパーユーザになって再度コンパイルしても同じでした。
くだらないところで躓いているのかもしれませんが、お気づきあらば
教授願います。

表記ですが、Linuxサーバーに対して、Windowsクライアントから
XWin環境にてユーザー"hoge"でログインを行い、
そのサーバー上でターミナルを立ち上げ
/usr/local/gcc_work
というフォルダを作り、その中で

---ここからーーー
#include <stdio.h>
int main(void)
{
printf("Hello,world\n");
return 1;
}
ーーーここまでーーー

のような、hello.cを作成し、

$ gcc -c hello.c -o hello
でバイナリを作成し

$ ./hello
とすると
bash: ./hello: cannot execute binary file

と...続きを読む

Aベストアンサー

> $ gcc -c hello.c -o hello

-c オプションをつけたときは実行ファイルまでは作らずに、オブジェクトファイル
(通常は .oの拡張子を持つもの)を作るだけですよ。
それは実行可能形式のファイルじゃありません。

file hello

とかしてみてください。
素直に -c オプションをつけずに

$ gcc hello.c -o hello

で実行可能な hello ができると思いますよ。

Q特定のディレクトリでコマンドが実行出来ない。

特定のディレクトリでコマンドが実行出来ない。

OSはRed Hat Enterprise Linux Server release 5.4です。

rootユーザで特定のディレクトリでlsコマンドを実行すると
エラーが発生します。
カレントディレクトリが該当のディレクトリでない場合には
問題ありません。

また、そのディレクトリではwhoやdfコマンド等でも
エラーとなってしまいます。
このような現象は、どのような原因が考えられるでしょうか?

以下は、全てrootユーザでの実行結果です。

# pwd
/opt/oracle/app/product/11.2.0/dbhome_1/lib

# ll stubs
合計 6404
-rwxr-xr-x 1 oracle oinstall 12121 2月 3 2009 ld-linux-2.3.4-stub.so
-rwxr-xr-x 1 oracle oinstall 12121 2月 3 2009 ld-linux-x86-64.so.2
-rwxr-xr-x 1 oracle oinstall 4911 2月 3 2009 libBrokenLocale-2.3.4-stub.so
-rwxr-xr-x 1 oracle oinstall 4911 2月 3 2009 libBrokenLocale.so
-rwxr-xr-x 1 oracle oinstall 4911 2月 3 2009 libBrokenLocale.so.1
 ・
 ・
 ・

# cd stubs

# pwd
/opt/oracle/app/product/11.2.0/dbhome_1/lib/stubs

# ls
ls: libc.so.6: version `GLIBC_2.4' not found (required by ls)
ls: libc.so.6: version `GLIBC_2.4' not found (required by /lib64/libacl.so.1)
ls: libc.so.6: version `GLIBC_2.4' not found (required by /lib64/libselinux.so.1)
ls: libc.so.6: version `GLIBC_2.4' not found (required by /lib64/libattr.so.1)
ls: libc.so.6: version `GLIBC_2.4' not found (required by /lib64/libsepol.so.1)

# who
who: libc.so.6: version `GLIBC_2.4' not found (required by who)

# df
df: libc.so.6: version `GLIBC_2.4' not found (required by df)

宜しくお願いいたします。

特定のディレクトリでコマンドが実行出来ない。

OSはRed Hat Enterprise Linux Server release 5.4です。

rootユーザで特定のディレクトリでlsコマンドを実行すると
エラーが発生します。
カレントディレクトリが該当のディレクトリでない場合には
問題ありません。

また、そのディレクトリではwhoやdfコマンド等でも
エラーとなってしまいます。
このような現象は、どのような原因が考えられるでしょうか?

以下は、全てrootユーザでの実行結果です。

# pwd
/opt/oracle/app/product/11.2.0/dbhome_1/lib

#...続きを読む

Aベストアンサー

> ;s: libc.so.6: version `GLIBC_2.4' not found (required by ls)
というエラーから、 共有ライブラリの問題だと思われます。

.so(あるいは、その前後に数字等が付いたもの)というのは、共有ライブラリと言って、WindowsのDLLのようなものです。
コマンドを実行するとき等に、必要な共有ライブラリを読み込みます。
DLLがそうであるように、共有ライブラリも適切なものが読み込まれないと、コマンドは正常に動作しません、

共有ファイルのある場所は
「環境変数LD_LIBRARY_PATHで指定されているディレクトリ」
→「デフォルトのディレクトリ」
の順で探されます。

LD_LIBRARY_PATHの書式は環境変数PATHと同じで、:で区切られたパスです。
このLD_LIBRARY_PATHの中に「.」(カレントディレクトリ)が含まれていると、当然、カレントディレクトリから見付けようとします。

今回のはおそらく
・LD_LIBRARY_PATH に . が含まれている
・/opt/oracle/app/product/11.2.0/dbhome_1/lib/stubsにlsやwho等で必要としている共有ライブラリと同じ名前のファイルが存在している(かつ、コマンドが使用している共有ライブラリと合致しない)
という状態だと思われます。


確認のため、echo $LD_LIBRARY_PATH として、中身を確認してください。
(場合によっては、LD_LIBRARY_PATH_64 の方かもしれません)

もし、.を含むようなら、.profileや.bashrc等で設定しているでしょうから、. をはずしてください。

> ;s: libc.so.6: version `GLIBC_2.4' not found (required by ls)
というエラーから、 共有ライブラリの問題だと思われます。

.so(あるいは、その前後に数字等が付いたもの)というのは、共有ライブラリと言って、WindowsのDLLのようなものです。
コマンドを実行するとき等に、必要な共有ライブラリを読み込みます。
DLLがそうであるように、共有ライブラリも適切なものが読み込まれないと、コマンドは正常に動作しません、

共有ファイルのある場所は
「環境変数LD_LIBRARY_PATHで指定されているディレクトリ」...続きを読む


人気Q&Aランキング