Liberando el software de Linux – compatibilidad

Quiero lanzar una biblioteca C ++ para Linux. ¿Es cierto que (cuando no hay otras bibliotecas dinámicamente vinculadas), solo la versión glibc decide la compatibilidad con otras distribuciones de Linux?

¿Existe una forma mejor de admitir la mayoría de las distribuciones de Linux de los últimos 5 años que configurar varias máquinas virtuales y comstackr allí? Por ejemplo, ¿se ejecutará un Linux binary que se ha comstackdo en un sistema Linux muy antiguo en nuevas versiones de Linux?

Las API del kernel de Linux son muy estables. (Estoy hablando de las llamadas al sistema, no de las API dentro del kernel). Un ejecutable vinculado estáticamente producido desde 1997 o less (el cambio a ELF como el formatting ejecutable) debería funcionar en cualquier sistema Linux actual. Sin embargo, los ejecutables vinculados estáticamente tienen muchos inconvenientes: son voluminosos, no se pueden actualizar fácilmente cuando se encuentran errores en un código de un tercero, y tienden a vivir en su propia burbuja ya que tienen problemas para interactuar con algunas características del sistema para lo cual la biblioteca estándar proporciona soporte configurable (por ejemplo, DNS, configuraciones regionales, counts de usuario, …).

Para las bibliotecas, una convención común es que el cambio en el primer número de la versión indica un cambio incompatible de ABI, y el rest de la versión aumenta en los cambios compatibles con versiones anteriores. Entonces, por ejemplo, si su progtwig está vinculado a la versión 2.3, funcionará con la versión 2.3 o 2.4 de la biblioteca, pero no con 2.2 o 3. Algunas bibliotecas usan convenciones diferentes. El vinculador dynamic usa el nombre de session grabado en la biblioteca para decidir si su versión es adecuada.

La biblioteca estándar en Linux no integrado es Glibc . La versión principal de Glibc ha sido 6 en Linux (por lo que se conoce como libc6) desde aproximadamente 1998; la versión principal aguas arriba es 2, lo que explica por qué la versión de libc6 es 2. MENOR y no 6. MENOR . En principio, los progtwigs vinculados con la versión anterior de libc6 deberían funcionar con versiones más recientes, aunque esto no siempre fue así desde el principio. Cualquier progtwig vinculado con Glibc 2.3 o superior debería funcionar en las versiones actuales.

La biblioteca estándar de C ++ solía cambiar más rápidamente, pero la versión principal actual (6) ha estado actualizada desde aproximadamente 2005.

Si comstack un progtwig en un sistema anterior, debería funcionar en sistemas más nuevos, siempre que las versiones de biblioteca requeridas estén disponibles. Tome la versión compatible más antigua de CentOS (actualmente 5) y la versión anterior más antigua [antigua] de Debian (actualmente sibilante, aunque squeeze aún podría calificar); si produce un file binary que se ejecuta en ambos, es probable que funcione en todas las instalaciones de Linux (sistemas integrados excluidos y aquellos que ejecutan versiones obsoletas para las cuales las actualizaciones de security ya no están disponibles).

Sí, principalmente, aunque es posible que deba evitar nuevas características del kernel.

Si desea crear un progtwig C ++ portátil, es recomendable adherirse al estándar oficial ISO C ++. A medida que se modifique el estándar, es posible que deba adaptar su progtwig, pero eso no suele ser mucho trabajo.

Puede pedirle a g ++ que mantenga un estándar anterior para evitar que su progtwig no se compile en una máquina con una biblioteca anterior. Define el aspecto del comstackdor

-D__STRICT_ANSI__ -D_ISOC99_SOURCE=1 -D_ISOC9X_SOURCE=1 

(para C).

Por supuesto, también está el problema del hardware (CPU objective que incluye architecture como IA64 y características de CPU como SSE).