2010-07-23 7 views
4

Je suis actuellement en train de construire une application assez volumineuse, en utilisant cmake pour générer des scripts de construction multi-plateforme. Au cours de ce processus de mise en place des scripts de construction cmake, j'ai découvert la douleur de la commande de ligne de liens gcc. Les problèmes de base sont que l'inclusion de bibliothèques statiques dans le mauvais ordre entraîne le rejet de symboles de bibliothèque inutilisés qui ne peuvent plus être trouvés par les bibliothèques dépendantes suivantes.CMake lien stade question

Ainsi, je suis dans la situation où cmake génère un système de construction de studios visuels qui compile bien, mais les fichiers make unix lancent toutes sortes d'erreurs de "symbole non défini". J'ai trouvé un travail pour cela - dans la commande add_executable, j'inclus deux fois les bibliothèques statiques. Je souhaite qu'il y ait une façon plus standard/meilleure de traiter ce problème. Etant donné que je ne suis pas le seul développeur, et que la majorité du développement régulier se fait sous windows, je veux vraiment un script CMake agnostique de lien de commande. Les développeurs Windows ne traitent pas ce problème de commande de lien. En plus de cela, trouver l'ordre correct serait très difficile - je n'ai pas cette information facilement disponible et il y a beaucoup de bibliothèques statiques (environ 70). Après avoir cherché sur Internet, j'ai découvert les indicateurs -static et -dynamic, mais il n'est pas évident que CMake les inclue et gcc se plaint de ne pas pouvoir trouver les bibliothèques dynamiques.

De toute façon, j'apprécie les suggestions sur la façon de faire la bonne chose.

Répondre

2

Je pense qu'il s'agit moins d'un problème CMake, et plus d'un comportement GCC. Cette question/réponse devrait aider un peu:

Linker order in GCC

Vous devrez mordre la balle et modifier vos fichiers CMakeLists.txt pour relier correctement sur Linux. Puisque les développeurs de Windows ne s'en soucient pas, vous ne devriez pas les déranger.

Best,
-Dan

+0

Rien dans la vie est toujours facile: < Le droit chemin signifie que lorsqu'une victoire dev ajoute une nouvelle bibliothèque, je vais pleurer un peu à l'intérieur. – Voltaire

+0

vous pouvez insister pour que les développeurs de fenêtres gardent un œil sur la construction de Linux autant qu'ils peuvent exiger votre attention sur le côté des fenêtres de la clôture. –

+0

Vous pouvez configurer un serveur CDash et ennuyer les développeurs Windows lorsque la rupture de votre Linux construit. Fonctionne bien pour nous (http://www.cdash.org). –

3

Avez-vous essayé de désactiver la bande? Peut-être avec quelque chose comme cmake -DCMAKE_STRIP=/bin/true ..? Peut-être que cela arrêtera les symboles jetés.