[ RISOLTO ] Chiarimento compilazione codice c++

di il
2 risposte

[ RISOLTO ] Chiarimento compilazione codice c++

Salve,

Avrei bisogno di un piccolo aiuto riguardo alla compilazione con g++ . Non riesco a capire la funzionalità dell'opzione -export-dynamic; nel senso che so che ogni file sorgente nella fase di traduzione produce una tabella dei simboli , ovvero una tabella di "parole" che non sono direttamente traducibili nel sorgente stesso perché definite altrove in altri sorgenti oppure nei .so (linux) so anche che tale tabella serve al linker per "risolvere" questi simboli ( sostituendoli con i loro indirizzi effettivi ) .

Vorrei in definitiva capire perché si deve passare questa opzione al compilatore e cosa vuol dire <<esportare la tabella dei simboli>>.

Ho provato a cercare in rete ma non ho trovato nulla che mi chiarisse le idee.. spero di aver postato nella sezione giusta .

Grazie anticipatamente a chi risponderà.

2 Risposte

  • Re: [ RISOLTO ] Chiarimento compilazione codice c++

    Ciao pitt921,
    il parametro passato al linker serve ad aggiungere tutti i simboli e non solo quelli così detti `statici` all'oggetto. E' utilizzabile forse nel contesto della libreria sharata caricata run-time, quello che comunemente chiamiamo plugin.
    Puoi comunque sperimentare, osservendo le informazioni dell'oggetto, dopo la fase di link attraverso il comando di sistema `objdump`

    In C (POSIX.1-2001) l'apertura/chiusura della libreria sharata viene fatto attaverso queste funzioni:
    
    void *dlopen(const char *filename, int flag);
    void *dlsym(void *handle, const char *symbol);
    int dlclose(void *handle);
    
    Manualistica ed esempi:
    
    $man 3 dlopen
    
    Manuale linker (ld):
    
    $man ld
    
    Estratto dal manuale

    <--cut-->

    -E
    --export-dynamic
    --no-export-dynamic
    When creating a dynamically linked executable, using the -E option or the --export-dynamic option causes the linker to add all symbols to the dynamic symbol table. The dynamic symbol table is the set of symbols which are visible from dynamic objects at run time.

    If you do not use either of these options (or use the --no-export-dynamic option to restore the default behavior), the dynamic symbol table will normally contain only those symbols which are referenced by some dynamic object mentioned in the link.

    If you use "dlopen" to load a dynamic object which needs to refer back to the symbols defined by the program, rather than some other dynamic object, then you will probably need to use this option when linking the program itself.

    You can also use the dynamic list to control what symbols should be added to the dynamic symbol table if the output format supports it. See the description of --dynamic-list.

    Note that this option is specific to ELF targeted ports. PE targets support a similar function to export all symbols from a DLL or EXE; see the description of --export-all-symbols below.

    <--cut-->
  • Re: [ RISOLTO ] Chiarimento compilazione codice c++

    .. infatti mi ero dimenticato di guardare il manuale sul linker .. o almeno, pensavo che l'eseguibile si chiamasse collect2 ( <<comando non trovato>> ) invece di ld . Ora ho capito .

    Scusate ma sono ancora alle prime .. mi devo abituare..

    Ringrazio per la pazienza e in particolar modo per la risposta ,ixamit .

    ;D
Devi accedere o registrarti per scrivere nel forum
2 risposte