ejecutar con compiler compile compilar compilador c++ linux gcc

c++ - con - gcc linux install



Vinculación estática con glibc y libstdc++ (4)

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 bloqueos aleatorios en mi aplicación.

Como solución alternativa, distribuyo binarios de mi aplicación compilados 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 en mente, ¿puedo enlazar estáticamente contra glibc y libstdc ++? Además, ¿esto causará problemas con rtld?


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 intento construir, decir el viejo Debian y tratar de 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.


Usted no necesita

Copie las bibliotecas originales que vinculó en un directorio (../lib en este ejemplo) en la carpeta de su 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 corresponde). Ahora ld debería poder encontrar las bibliotecas dinámicas con las que se vinculó y no es necesario compilarlas 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.


glibc está bajo la LGPL. En la sección 6 de LGPL 2.1 , puede distribuir su programa 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 programa, 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 debería considerar consultar uno si necesita asesoramiento legal real.


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.