Impossible de lancer un serveur: Libs GCC trop anciennes sous Centos 7

OFCBoot
Messages : 6
Inscription : 18 septembre 2019, 08:49

Impossible de lancer un serveur: Libs GCC trop anciennes sous Centos 7

Message par OFCBoot » 16 décembre 2019, 13:18

Bonjour à tous,

Cela fait quelques jours que je suis confronté à un problème. Le jeu OnSet ayant annoncé sa sortie, j'aurais aimé créer un serveur sur un de mes dédiés qui utilisent tous Centos 7 à jour. Seulement le soucis, c'est que lorsque j'essaye de lancer le serveur, j'obtiens cette erreur:

Code : Tout sélectionner

./OnsetServer: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
J'ai réussi à compiler cette lib EL7 sur internet, je l'ai donc placée dans /opt/onset_deps/lib64/ et utilisé export LD_LIBRARY_PATH=/opt/onset_deps/lib64/:/opt/onset_deps/lib/:$LD_LIBRARY_PATH pour indiquer l'emplacement de la lib.

Suite à ça, je me retrouve avec cette erreur:

Code : Tout sélectionner

./OnsetServer: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by ./OnsetServer)
./OnsetServer: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by ./OnsetServer)
./OnsetServer: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./OnsetServer)
./OnsetServer: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./OnsetServer)
./OnsetServer: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./OnsetServer)
J'en déduis que la version de GCC utilisée pour compiler OnsetServer est plus récente, et mes doutes se confirment lorsque je me rends sur le Discord de Onset et que je vois ceci de la part du développeur:
The server is compiled with GCC 7.3 so I think the libc version of CentOS 7 might be too old
Si je ne dis pas de connerie, la dernière version GCC sous Centos 7 est 4.8.5, du coup on est loin du compte.

J'ai essayé de m'en sortir de plusieurs manières, et ma dernière solution viable serait d'utiliser un conteneur pour lancer le serveur, mais cette solution ne me plait pas trop, j'aimerais si possible trouver une solution pour faire tourner le serveur plus proprement sous Centos 7, raison pour laquelle je me tourne vers vous pour essayer de trouver une solution.

Merci d'avance.

tru
Messages : 233
Inscription : 20 octobre 2009, 09:30

Re: Impossible de lancer un serveur: Libs GCC trop anciennes sous Centos 7

Message par tru » 17 décembre 2019, 16:16

Tu peux avoir gcc 8.2.1 en installant devtoolset-8, ou gcc-7.2.1 avec devtoolset-7, mais pas de glibc plus récente que glibc-2.17-292.el7.x86_64.

Code : Tout sélectionner

[tru@elitebook840g3 ~]$ scl -l
devtoolset-7
devtoolset-8
[tru@elitebook840g3 ~]$ scl enable  devtoolset-7 bash
[tru@elitebook840g3 ~]$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-7/root/usr --mandir=/opt/rh/devtoolset-7/root/usr/share/man --infodir=/opt/rh/devtoolset-7/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --with-linker-hash-style=gnu --enable-initfini-array --with-default-libstdcxx-abi=gcc4-compatible --with-isl=/builddir/build/BUILD/gcc-7.3.1-20180303/obj-x86_64-redhat-linux/isl-install --enable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC) 
[tru@elitebook840g3 ~]$ 

[tru@elitebook840g3 ~]$ echo 'gcc -v'| scl enable devtoolset-8 -
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-8/root/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-8/root/usr --mandir=/opt/rh/devtoolset-8/root/usr/share/man --infodir=/opt/rh/devtoolset-8/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --with-default-libstdcxx-abi=gcc4-compatible --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-8.3.1-20190311/obj-x86_64-redhat-linux/isl-install --disable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC) 


OFCBoot
Messages : 6
Inscription : 18 septembre 2019, 08:49

Re: Impossible de lancer un serveur: Libs GCC trop anciennes sous Centos 7

Message par OFCBoot » 17 décembre 2019, 16:38

Salut, merci pour ta réponse,

Effectivement j'avais testé ceci:

Code : Tout sélectionner

cu2@prod-ded3:~/server_onset1$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)

cu2@prod-ded3:~/server_onset1$ export LD_LIBRARY_PATH=/opt/onset_deps/lib64/:$LD_LIBRARY_PATH

cu2@prod-ded3:~/server_onset1$ ./OnsetServer
./OnsetServer: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by ./OnsetServer)
./OnsetServer: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by ./OnsetServer)
./OnsetServer: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./OnsetServer)
./OnsetServer: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./OnsetServer)
./OnsetServer: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./OnsetServer)

cu2@prod-ded3:~/server_onset1$ scl enable devtoolset-8 bash

cu2@prod-ded3:~/server_onset1$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-8/root/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-8/root/usr --mandir=/opt/rh/devtoolset-8/root/usr/share/man --infodir=/opt/rh/devtoolset-8/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --with-default-libstdcxx-abi=gcc4-compatible --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-8.3.1-20190311/obj-x86_64-redhat-linux/isl-install --disable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)

cu2@prod-ded3:~/server_onset1$ ./OnsetServer
./OnsetServer: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by ./OnsetServer)
./OnsetServer: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by ./OnsetServer)
./OnsetServer: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./OnsetServer)
./OnsetServer: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./OnsetServer)
./OnsetServer: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./OnsetServer)

cu2@prod-ded3:~/server_onset1$ exit
exit

cu2@prod-ded3:~/server_onset1$
Le problème était toujours le même, parce que ce sont les libs qu'ils me faut.

Je suppose de toute manière que la meilleur approche ne serait pas de vouloir mettre à jour Glibc de Centos vu que ça casserait probablement le système, mais savoir s'il est possible de contourner le système pour lancer le serveur sans passer par Glibc de Centos.

Sachant que ça m'ennuie assez fortement de passer par un conteneur style Docker, vu le travail que ça me demanderait au niveau du système qui gère les serveurs que j'ai totalement développé moi-même et qui serait probablement incompatible avec un lancement et un arrêt de conteneur (sans parler de la mise en place de ceux-ci avec les mises à jour automatiques et regulières de OnSet-Server) :cry:

On va dire que ma priorité est de trouver une manière de pouvoir éviter tout conteneur.

Merci.

Répondre