Vinculación estática con glibc y libstdc ++

Estoy escribiendo una aplicación multiplataforma que no es compatible con GNU GPL. El principal problema al que me enfrento actualmente es que la aplicación está vinculada dinámicamente con glibc y libstdc ++, y casi todas las nuevas actualizaciones importantes de las bibliotecas no son compatibles con versiones anteriores. Por lo tanto, se ven lockings aleatorios en mi aplicación.

Como solución alternativa, distribuyo binarios de mi aplicación comstackdos en varios sistemas diferentes (con diferentes versiones de tiempo de ejecución de C / C ++). Pero quiero prescindir de esto. Así que mi pregunta es, teniendo en cuenta las licencias y todo lo que tenga en mente, ¿puedo enlazar estáticamente contra glibc y libstdc ++? Además, ¿esto causará problemas con rtld?

Usted no necesita

Copie las bibliotecas originales que vinculó a un directorio (../lib en este ejemplo) en su carpeta de aplicación.

Me gusta:

my_app_install_path

  1. .compartimiento
  2. lib
  3. documentación

Cambie el nombre de su aplicación por algo como app.bin. Sustituya su aplicación por un pequeño script de shell que establezca la variable de entorno LD_LIBRARY_PATH a la ruta de la biblioteca (y concatene los contenidos LD_LIBRARY_PATH anteriores, si los hay). Ahora ld debería poder encontrar las bibliotecas dinámicas con las que se vinculó y no es necesario comstackrlas de forma estática en su ejecutable.

Recuerde cumplir con la LGPL agregando la atribución dada a las bibliotecas y señalando la documentación donde se puede descargar la fuente.

Si se especifica la opción -static-libgcc en el vinculador, se vinculará con una versión estática de la biblioteca C, si está disponible en el sistema. De lo contrario se ignora.

glibc está bajo la LGPL. En la sección 6 de LGPL 2.1 , puede distribuir su progtwig vinculado a la biblioteca siempre que cumpla con una de las cinco opciones. El primero es proporcionar el código fuente de la biblioteca, junto con el código objeto (la fuente es opcional, no se requiere) de su propio progtwig, para que pueda volver a vincularse con la biblioteca. Alternativamente, puede proporcionar una oferta por escrito de la misma. Su propio código no tiene que estar bajo la LGPL, y usted no tiene que liberar la fuente.

libstdc ++ está bajo la GPL, pero con una excepción importante . Básicamente, puede simplemente distribuir bajo la licencia de su elección sin proporcionar una fuente para su propio código o libstdc ++. La única condición es que compile normalmente, sin, por ejemplo, modificaciones propietarias o complementos a GCC.

IANAL, y debe considerar consultar uno si necesita asesoramiento legal real.

Debo preguntarme qué diablos está haciendo con las pobres funciones de la biblioteca.

También tengo algún software multiplataforma. Funciona bien en sistemas Linux de todo tipo. Constrúyalo con la versión más antigua de software que desee admitir. Las bibliotecas glibc y libstdc ++ son realmente muy compatibles con versiones anteriores.

He construido en CentOS 4 y lo ejecuto en RHEL 6 beta. No hay problemas. Puedo construir en Debian estable y ejecutarlo en las pruebas.

Ahora, a veces tengo problemas con algunas bibliotecas si bash construir, decir el viejo Debian e intentar ejecutarlo en CentOS 5.4. Esto generalmente se debe a las opciones de configuración de distribución que son diferentes, como la selección de subprocesos o no.