2012-05-15 4 views
5

Un programa C compilado aquí funciona bien en nuestros servidores Ubuntu. Pero cuando un alguien intenta ejecutarlo en su servidor Linux particular, se obtienen los siguientes errores:La ejecución de un programa C compilado aquí genera un error de biblioteca GLIBC no encontrado en otro servidor, ¿es culpa mía o de ellos?

./myprog-install: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by ./myprog-install) 
./myprog-install: /lib/tls/libc.so.6: version `GLIBC_2.7' not found (required by ./myprog-install) 

Qué necesito para actualizar nuestras bibliotecas glibc y recompilar? ¿O están perdiendo algo en su servidor?

Si me quedo apt-cache show libc6 mi Ubuntu me dice que la versión es:

Package: libc6 
Priority: required 
Section: libs 
Installed-Size: 9368 
Maintainer: Ubuntu Core developers <[email protected]> 
Original-Maintainer: GNU Libc Maintainers <[email protected]> 
Architecture: i386 
Source: eglibc 
Version: 2.11.1-0ubuntu7.10 

Si miro http://packages.ubuntu.com/hardy/libc6 la versión actual parece ser 2.7-10ubuntu8.1.

Estoy confundido por los números. Por un lado 2.11-1-0 es un número más alto que 2.7-11. Por otro lado 7.10 es un número menor que 8.1.

¿Es solo cuestión de actualizar el paquete de la biblioteca C y volver a compilar? ¿O es que el servidor de la otra persona falta alguna biblioteca necesaria para la compatibilidad?

+0

Es posible que desee preguntar esto en http://askubuntu.com/, o vea esta pregunta relacionada. http://askubuntu.com/q/103995/59427. –

Respuesta

8

Usted ha creado el sistema glibc-2.11. Está intentando ejecutar en un sistema con glibc-2.3 o anterior. Eso no va a funcionar.

¿Es sólo una cuestión de mí actualizar el paquete de biblioteca C

No: la actualización de su glibc sólo hará cosas peores .

Es posible que desee probar las soluciones enumeradas here.

¿Es esto razonablemente podemos solicitar a la otra parte actualizar su sistema para que sea compatible, en lugar de rebajar nuestro compilador?

Por lo general, el cliente se resistirán firmemente solicitudes para actualizar su sistema: Está funcionando bien para ellos como es , y cualquier actualización puede romper otras aplicaciones existentes.

Si usted está planeando distribuir binarios en Linux (en oposición a la construcción de ellos en el sistema de destino), entonces usted necesita para aprender a hacer los binarios que se ejecutarán todas partes, o si necesita especificar sus necesidades (mínimo versiones kernel y libc, etc.) y convertir clientes que no pueden cumplir con estos requisitos.

Actualización:

¿Por qué se les ocurrió dos errores. ¿Por qué no acaban de obtener uno para GLIBC_2.11.1 que aparentemente es con lo que construí?

Las versiones de símbolo no funcionan de esa manera.

Cuando se introduce un nuevo símbolo, se marca con la versión actual de libc, p. Ej. [email protected]@GLIBC_2.2, [email protected]@GLIBC_2.15, etc.

Cuando vincula un programa que utiliza los dos símbolos anteriores e intenta ejecutarlo, p. sistema glibc-2.1, obtendría dos errores.

Pero si vincula un programa que no usa, utilice cualquiera de los símbolos anteriores, p.

int main() { return 0; } 

entonces su programa se ejecutará sin ningún error.

Actualización 2:

que no tienen que añadir tanto GLIBC_2.4 y GLIBC2.7 a su sistema Linux, ¿verdad?

No, no es así. El GLIBC_2.11 tendrá todos los símbolos anteriores. De hecho, no podían instalar ambos glibc-2.4 y 2.7 aunque quisieran: es bastante difícil tener múltiples versiones instaladas al mismo tiempo, y imposible para tener múltiples versiones instaladas en la ubicación predeterminada.

+0

Oh, ya veo. Debido al mensaje de error en sí, refiriéndose a que GLIBC_2.4 y GLIBC_2.7 no se encuentran. Duh. :) Veré las soluciones recomendadas en el enlace. ¿Es esto algo que razonablemente podemos solicitar a la otra parte que actualice su sistema para que sea compatible, en lugar de rebajar nuestro compilador? ¡Gracias! –

+0

Es un dilema interesante. Es de suponer que las versiones más nuevas de glibc son mejoras sobre las anteriores, más rápidas, menos problemáticas, etc. Odio tener que mantener múltiples versiones. Y también odiaría lanzar algo dirigido al mínimo común denominador y obtener posiblemente menos rendimiento. Sin mencionar volver a probar todas las características para bibliotecas antiguas. Esta no es una aplicación de mercado masivo, por lo que quizás esté bien en este caso pedirle al cliente que actualice a una versión de Linux donde la aplicación ha sido probada exhaustivamente. De lo contrario, es difícil proporcionar el soporte adecuado. ¡Gracias! –

+0

Tengo una pregunta de seguimiento rápida si alguien ve esto. ¿Por qué el usuario recibe DOS mensajes de error: uno para GLIBC_2.4 y el otro para GLIBC_2.7. ¿Por qué no acaban de obtener uno para GLIBC_2.11.1 que aparentemente es con lo que construí? Gracias. Doug –

1

Lo ha compilado contra una versión de glibc que es demasiado nueva. Compárelo con una versión anterior de glibc, preferiblemente la que están usando.

+0

Pero, ¿cómo enlazar con la versión anterior de glibc? ¿Debo instalar la versión anterior de glibc? ¿Pueden coexistir diferentes versiones de glibc en el mismo sistema? – linquize

Cuestiones relacionadas