Linux : Relocation error

Linux : Relocation error - C - Programmation

Marsh Posté le 06-12-2004 à 12:31:58    

J'en ai plein le cul, j'en ai marre, je craque.
 
Comment faire sous ce \#~^@ de linux de mon #~\\@#~= pour eviter d'avoir des relocations error ?
 
Zallez me dire : inclu le .a qui va bien dans les flags du linker ducon [:itm]
 
A ceci je reponds : il y est. Seulement il semblerait que l'ordre dans lequel on passe les .a a ce linker ait un role a jouer, et parfois apres avoir ajouter des fonctions a une lib je dois 'remettre a jour' l'ordre pour ne plus avoir des relocations errors. Que faire ?


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 06-12-2004 à 12:31:58   

Reply

Marsh Posté le 06-12-2004 à 13:03:47    

Et après un  
$ ar -q libtruc.a truc1.o truc2.o # on ajoute les fichiers à l'archive sans updater l'index
$ ranlib libtruc.a # on update l'index
çà foire toujours?


Message édité par manatane le 06-12-2004 à 13:04:00
Reply

Marsh Posté le 06-12-2004 à 13:11:16    

sais pas, j'essayerais tout a l'heure. Tu peux me dire en detail ca fait quoi ? (note je veux pas rajouter des .o a un .a mais faire un executable avec des .a, et lorsque l'exe appels des fonctions contenus dans les .a ca debloque. ca me lourde grave, y pourrait pas le dire au link qu'il a pas trouver la fonction, l'animal ?)

Reply

Marsh Posté le 06-12-2004 à 13:25:24    

L'ordre des .a a un role à jouer uniquement dans le cas ou un symbole se retrouve dans plusieurs .a à la fois. Le linker prend le premier trouvé.

Reply

Marsh Posté le 06-12-2004 à 13:30:06    

Krys : bin heuh, je te repondrais non, en changeant l'ordre des .a adns les flags du linker (et juste ca), j'ai des relocations errors, ou pas.

Reply

Marsh Posté le 06-12-2004 à 13:36:30    

ar c'est vieux et chiant :)
Ton problème viens d'un de tes .a, je pense que t'as un petit problème d'interposing :D
Bon dans ta librairie statique tu as un index qui liste les noms des variables globales et des fonctions. C'est cette index qu'utilise le linker pour inclure ou non les modules.
L'index est créé quand la librairie est créée ou mise à jour mais on peut supprimer la création de l'index. L'option -q de ar permet d'ajouter des modules sans création de l'index.
Ranlib crée ou met à jour l'index.
Ensuite en effet l'ordre des modules dans la librairie est important puisque si le meme symbole est présent dans plusieurs modules ar va se contenter d'inclure le premier [:bap2703] Il y a quand meme des options pour inclure un module à une place spécifique et changer l'ordre de ceux déjà présent dans l'archive...

Reply

Marsh Posté le 06-12-2004 à 13:37:26    

mais si j'ai plusieurs def dans les .a d'une meme fonction ca devrait pas me faire de relocation error ? ca pourrait partir en couille vu qu'on appelerait pas la fonction qu'on pense appeler, mais pas de relocation error ??

Reply

Marsh Posté le 06-12-2004 à 13:45:02    

Tu as ton index qui est foiré (enfin pas pour ar mais bon) vu qu'un module est censé etre inclut et qu'il ne l'ait pas. Ton programme lié statiquement appelle à l'inlusion de fonction non présente dans un index -> relocation error.
(j'espère ne pas etre à coté de la plaque)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed