GLIBCXX 3.4.15 pada Centos 6

8

Saya perlu menginstal GLIBCXX 3.4.15 pada versi Centos 6 saya (untuk menjalankan server untuk permainan di Steam). Saya sudah googled sekitar dan memiliki beberapa situs web di mana mereka menginstal program di mana kesalahan muncul di mana dikatakan bahwa 3.4.15 diperlukan ( LoadLibrary ERROR: /usr/lib/libstdc++.so.6: version 'GLIBCXX_3.4.15' not found), tetapi mereka hanya menggunakan cara untuk memotongnya / tidak menginstalnya. Ketika saya melakukannya strings /usr/lib/libstdc++.so.6 | grep GLIBCXX, ini adalah hasilnya:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

Jadi, bagaimana saya menginstal GLIBCXX 3.4.15 secara langsung pada Centos 6?

PMint
sumber

Jawaban:

7

Saya akan menganggap ini peretasan tetapi telah menggunakannya pada lebih banyak kesempatan daripada yang saya akui untuk mengatasi masalah kompatibilitas dengan GLIBC, seperti yang Anda temui.

Peretasan melibatkan pembuatan tautan /usr/libyang menyertakan nama perpustakaan yang diinginkan oleh alat tertentu. Tautan kemudian menunjuk ke nama alternatif perpustakaan.

Contoh

Katakanlah saya ingin membuat tautan libstdc++.so.6.

$ ls -l /usr/lib | grep libstdc++.so
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6 -> libstdc++.so.6.0.14
-rwxr-xr-x   1 root root   950428 Sep 24  2010 libstdc++.so.6.0.14

Berhasil menjadi seperti ini:

$ ln -s libstdc++.so.6 libstdc++.so.6.0.15

Memeriksa hasil:

$ ls -l /usr/lib | grep libstdc++.so
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6 -> libstdc++.so.6.0.14
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6.0.15 -> libstdc++.so.6.0.14
-rwxr-xr-x   1 root root   950428 Sep 24  2010 libstdc++.so.6.0.14

Tetapi saya tidak yakin metode ini akan berhasil karena pustaka Anda masih akan melewatkan string versi GLIBCXX_3.4.15,.

Jika peretasan tidak berhasil maka Anda kemungkinan harus menggigit peluru dan menginstal GLIBC di direktori alternatif, dan kemudian menimpa LD_LIBRARY_PATHatau lebih LD_PRELOADsehingga eksekusi hanya uap melihat perpustakaan yang dimodifikasi.

Contoh

$ LD_PRELOAD='mylibc.so anotherlib.so' program

Detail tentang cara melakukan ini dibahas sedikit lebih banyak di sini di SO T&J ini: Beberapa pustaka glibc pada satu host .

slm
sumber
@ PMint - metode apa yang cocok untuk Anda?
slm
Bukankah seharusnya baris kedua ls, ketiga libstdc++.so.6.0.15 -> libstdc++.so.6.0.14?
Runium
@Sukminder - ya, terima kasih atas tangkapannya. Tetap.
slm
2

Pada dasarnya versi paket libstdc ++ RPM yang dikirim oleh CentOS (4.4.7) tidak cukup baru untuk aplikasi Anda. CentOS menawarkan stabilitas jangka panjang, bukan versi terbaru dan terhebat, jadi itu tidak sepenuhnya tak terduga.

Fedora biasanya sedikit lebih maju dan dapat menjalankan server Anda tanpa masalah.

Atau Anda dapat membangun versi libstdc ++ yang lebih baru dari sumber yang lebih terkini. Saya akan memulai file CentOS SPEC di SRPM gcc, rilis terbaru dari gcc.gnu.org dan mengolahnya untuk membuat RPM saya sendiri.

Upgrade perpustakaan C di masa lalu merupakan cara yang baik untuk merusak sistem dengan cara yang tidak terduga ...

HBruijn
sumber