2009-09-02 6 views
1

J'ai écrit du code C++ personnalisé et ça fonctionne très bien dans ubuntu, mais quand je le télécharge sur mon serveur (qui utilise centos 5) il échoue et dit que la bibliothèque est obsolète. Je ai googlé tout autour et centos ne peuvent pas utiliser les dernières bibliothèques. Comment est-ce que je peux compiler contre le stl pour qu'il soit inclus dans le binaire et cela n'a pas d'importance que centos utilise une vieille bibliothèque?compiler contre libC++ statiquement

P.S. Je ne veux pas télécharger la source sur le serveur et compiler là.

Répondre

1
  1. Vous pouvez installer sur votre boîte Ubuntu le compilateur qui correspond à la version de la bibliothèque sur votre serveur .

  2. Vous pouvez expédier votre application avec libstdC++. Ainsi prise du système que vous l'avez compilé, à condition que vous ajustiez la liaison pour qu'elle soit chargée au lieu de celle de centos.

  3. Vous pouvez le compiler statiquement. Pour ce faire, vous devez passer votre compilateur de g ++ pour

    gcc -Wl, -Bstatic -lstdC++ -Wl, -Bdynamic

Choisissez ce que vous voulez. Notez que les approches (2) et (3) peuvent poser le problème des dépendances: votre projet (en particulier, l'implémentation stdC++ qui, étant liée statiquement, fait maintenant partie de votre application) peut nécessiter certaines fonctions à présenter dans les bibliothèques système centos. S'il n'y a pas de telles fonctions, votre application ne démarrera pas. La raison pour laquelle cela peut arriver est que le système Ubuntu que vous compilez est plus récent, et la compatibilité ascendante n'est pas conservée dans les bibliothèques Linux.