J'ai eu de nombreux problèmes lors de la compilation d'objets partagés qui se lient statiquement à des bibliothèques statiques. Ce problème n'apparaît que sur les plates-formes x84_64. Lorsque je fais le même travail de compilation sur x86_32, je n'ai aucun problème.
C'est peut-être une configuration de GCC spécifique au système d'exploitation, mais mes recherches indiquent que son fonctionnement de GCC sur les plates-formes x86_64. Quoi qu'il en soit, j'utilise gcc 4.4.3 sur Ubuntu 10.04 x86_64.
Comment le problème est-il résolu? ... Assurez-vous que toutes les dépendances des bibliothèques statiques sont compilées avec -fPIC.
Question 1: Quelle est la différence entre -fpic et -fPIC (apparemment -fPIC génère plus d'instructions sur x86)? Pourquoi le dernier type est-il plus pertinent dans le contexte x86_64?
Question 2: Mon hypothèse est que lorsque vous établissez une liaison avec du code statique, vous câblez les fonctions dans votre binaire au moment de la liaison, pourquoi a-t-il besoin du niveau d'indirection fourni par la machine "code indépendant de la position" ?
Question 3: Maintenant, si x86 n'a pas besoin de -fpic/-fPIC pour lier des objets partagés à des archives statiques, pourquoi est-ce nécessaire dans x86_64?
Question 4: même si cela est nécessaire, pourquoi n'est-il pas fourni implicitement? Je pensais que casser les changements était censé être un gros non
De plus, mon conseil serait: si vous avez besoin de vous en soucier, vous le faites mal (ou vous aimez apprendre à la dure, ce qui est agréable parce que vous tirerez le meilleur parti de l'expérience). Les systèmes de compilation (libtool, cmake, quoi que vous utilisiez) devraient le faire pour vous.