Liaison statique avec glibc et libstdc ++

J’écris une application multi-plateforme qui n’est pas compatible avec GNU GPL. Le problème majeur que je rencontre actuellement est que l’application est liée dynamicment avec glibc et libstdc ++, et presque toutes les nouvelles mises à jour majeures des bibliothèques ne sont pas rétrocompatibles. Par conséquent, des accidents aléatoires sont visibles dans mon application.

Pour contourner ce problème, je dissortingbue des binarys de mon application compilés sur plusieurs systèmes différents (avec différentes versions d’exécution C / C ++). Mais je veux m’en passer. Donc, ma question est de garder les licences et tout en tête, puis-je établir un lien avec glibc et libstdc ++ statiquement? En outre, cela causera-t-il des problèmes avec rtld?

Vous n’avez pas besoin de

Copiez les librairies originales que vous avez liées dans un répertoire (../lib dans cet exemple) dans votre dossier d’application.

Comme:

my_app_install_path

  1. .poubelle
  2. lib
  3. Documentation

Renommez votre application pour quelque chose comme app.bin. Remplacez votre application par un petit script shell qui définit la variable d’environnement LD_LIBRARY_PATH sur le chemin de la bibliothèque (et concaténéz le contenu LD_LIBRARY_PATH précédent, le cas échéant). Maintenant, ld devrait être capable de trouver les bibliothèques dynamics auxquelles vous avez lié et vous n’avez pas besoin de les comstackr statiquement sur votre exécutable.

N’oubliez pas de respecter la LGPL en ajoutant l’atsortingbution donnée aux bibliothèques et en indiquant dans la documentation où la source peut être téléchargée.

La spécification de l’option -static-libgcc sur l’éditeur de liens entraînerait sa liaison avec une version statique de la bibliothèque C, si elle est disponible sur le système. Sinon, il est ignoré.

La glibc est sous la LGPL. Sous la section 6. de la LGPL 2.1 , vous pouvez dissortingbuer votre programme lié à la bibliothèque à condition que vous respectiez l’une des cinq options. La première consiste à fournir le code source de la bibliothèque, ainsi que le code object (source facultatif, non requirejs) de votre propre programme, afin de pouvoir le relier à la bibliothèque. Vous pouvez également fournir une offre écrite de la même manière. Votre propre code ne doit pas obligatoirement être sous la licence LGPL, et vous n’avez pas à libérer de source.

libstdc ++ est sous la GPL, mais avec une exception majeure . Vous pouvez simplement dissortingbuer sous la licence de votre choix sans fournir de source pour votre propre code ou libstdc ++. La seule condition est que vous compiliez normalement, par exemple sans modifications propriétaires ou plugins vers GCC.

IANAL, et vous devriez envisager d’en consulter un si vous avez besoin de véritables conseils juridiques.

Je dois me demander ce que vous faites avec les fonctions médiocres de la bibliothèque?

J’ai aussi des logiciels multi-plateformes. Il fonctionne bien sur les systèmes Linux de toutes sortes. Construisez avec la version la plus ancienne du logiciel que vous souhaitez prendre en charge. Les bibliothèques glibc et libstdc ++ sont vraiment très compatibles.

J’ai construit sur CentOS 4 et je l’exécute sur RHEL 6 beta. Pas de problème. Je peux construire sur Debian stable et l’exécuter lors des tests.

Maintenant, j’ai parfois des problèmes avec certaines bibliothèques si j’essaie de construire, disons le vieux Debian et essaye de l’exécuter sur CentOS 5.4. Cela est généralement dû à des choix de configuration de dissortingbution différents, tels que le choix du threading ou du non-threading.