Quote:
Originariamente inviato da Unrue
Mm, non mi torna..  Il linker , quando vede le chiamate incrociate, non riesce a capire da solo che si sta richiamando una libreria già indicata. Perché?
|
Perché le librerie da linkare vengono processate sequenzialmente dal linker. Quando incontra un archivio statico, il linker include solo gli oggetti .o presenti nell'archivio statico che sono richiesti, ovvero che forniscono un simbolo ancora non risolto. Gli altri vengono scartati, per evitare di ingrandire il programma con oggetti non necessari.
Nel tuo caso, nel momento in cui viene processato -lblacs, il simbolo richiesto da blacsCinit non è ancora noto, quindi l'oggetto .o di blacs che lo contiene viene scartato.
Quote:
Un'altra soluzione quale sarebbe, visto che le hai accennate? Grazie.
|
Forzare il linker a includere tutti gli oggetti dei due archivi statici, oppure trasformare gli archivi statici in librerie dinamiche (.so).
Meglio sarebbe correggere le due librerie in modo da non avere dipendenze incrociate.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
|