GNU/Linux >> Linux Esercitazione >  >> Linux

Strano nome di simbolo nell'output del comando nm

Ciò è dovuto alla manipolazione dei nomi in C++

nm -C

li disgrega.

Per impedire la manipolazione dei nomi,

  • usa un compilatore C (gcc, non g++), chiama il tuo file sorgente .c (non .cpp)
  • o dichiara extern "C":

.

mio.h

  extern "C" 
  {
        void start();
        void finish();
  }

Questo darà loro il collegamento "C", il che significa che non possono essere sovraccaricati, non possono passare per riferimento, niente c++ :)


Sembra che il nome C++ mutili.


Come hanno già detto altre risposte, ciò è probabilmente dovuto alla manipolazione del nome C++. Se vuoi che il simbolo sia accessibile con il suo nome 'non modificato', ed è implementato in C++, avrai bisogno di us extern "C" per dire al compilatore C++ che ha un collegamento C.

Nell'intestazione che contiene il prototipo della funzione, vorrai qualcosa del tipo:

#if defined(__cplusplus)
extern "C" {
#endif

// the prototype for start()...


#if defined(__cplusplus)
}
#endif

Ciò assicurerà che se la funzione viene utilizzata da un compilatore C++, otterrà extern "C" sulla dichiarazione, e che se è usato da un modulo C, non sarà confuso dal extern "C" identificatore.

La tua implementazione nel file .cpp non ha bisogno di quella roba se includi l'intestazione prima della definizione della funzione. Userà la specifica di collegamento che ha visto dalla dichiarazione precedente. Tuttavia, preferisco ancora decorare la definizione della funzione con extern "C" solo per assicurarti che tutto sia sincronizzato (nota che nel file .cpp non hai bisogno del #ifdef roba di pre-elaborazione - sarà sempre compilata come C++.


Linux
  1. Memorizzazione dell'output del comando nella variabile Shell?

  2. Converti l'output del comando ad albero in formato Json?

  3. Output di quale comando utilizzato per l'input su Cd?

  4. Esempi di comandi temporali di Linux

  5. 10 esempi pratici di comandi Linux nm

Ccat:colora l'output del comando Cat

comando iftop in Linux

Comando lsblk in Linux

Esempi di comandi echo Linux

Cosa significa il simbolo della pipe Linux | fare?

Reindirizzamento dell'output del comando nella finestra mobile