/ / Comment autoriser le remplacement de méthodes existantes au moment de la liaison avec Xcode? Utiliser 'ar -r' au lieu de libtool? - c ++, xcode, g ++, xcodebuild, libtool-xcode

Comment autoriser le remplacement de méthodes existantes au moment de la liaison avec Xcode? Utiliser 'ar -r' au lieu de libtool? - c ++, xcode, g ++, xcodebuild, libtool-xcode

Certains codes compilent parfaitement sous Mac OS X avec g ++ à l'aide de makefiles, mais je ne parviens pas à créer correctement avec Xcode.

Voici un bref aperçu de la configuration du projet. Les exemples suivants sont disponibles:

  1. libA.a

    • contient myclass_stub.cpp qui implémente func ()
    • Nos makefiles empaqueteront la bibliothèque avec "ar -r", ce qui permet de remplacer les méthodes existantes.
    • Xcode utiliserait libtool pour le conditionner
  2. program.exe contient myclass.cpp qui implémente également func (). et lie libA.a de manière statique en utilisant g ++

Si je construisais libA.a et program.exe avec Xcode, il se plaint de la fonction "Symbole en double" dans myclass_stub.o et myclass.o au moment du lien.

J'ai aussi essayé de compiler program.exe avec Xcode et de le lier à libA.a qui était emballé avec "ar -r", mais il se plaint toujours du symbole en double.

Avoir une mise en œuvre en double pourrait ne pas êtreidéal, mais je ne peux pas le contourner pour le moment. Si je pouvais obtenir que le code soit construit avec les makefiles en utilisant les standards "ar" et "g ++", j'aimerais savoir quelles options je dois définir dans Xcode pour que cela fonctionne.

Maintenant, mes questions:

  1. Je voudrais utiliser "ar -r" pour emballer la bibliothèque dans Xcode à la place. C'est possible? Si c'est le cas, comment? Existe-t-il une option similaire avec libtool où je peux forcer le remplacement des symboles existants?

  2. Je suppose que la différence entre libtool et "ar-r "n'est peut-être pas la différence principale entre la construction avec Xcode et celle avec makefiles. J'ai les mêmes drapeaux de compilation, mais la liste des fichiers d'entrée / objet est généralement dans un ordre différent. Voyez-vous d'autres solutions possibles erreur de liaison?

J'ai vu une question liée @ libtool vs ar pour créer une bibliothèque statique (linker xcode), mais pas la solution

A propos, j’ai aussi essayé d’ajouter tout-load et -force-load, mais ils ne semblent pas faire grand-chose puisque je cherche seulement à construire pour x86_64.

Réponses:

0 pour la réponse № 1

Je ne connais rien à xcode, mais avez-vous pensé à utiliser des symboles faibles (en g ++: attribut((faible))) pour les symboles qui doivent être remplacés?