GNU/Linux >> Belajar Linux >  >> Linux

Nama simbol aneh di keluaran perintah nm

Itu karena kekacauan nama C++

nm -C

mengacaukan mereka.

Untuk mencegah penguraian nama,

  • gunakan kompiler C (gcc, bukan g++), beri nama file sumber Anda .c (bukan .cpp)
  • atau deklarasikan extern "C":

.

saya.h

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

Ini akan memberi mereka tautan "C", artinya mereka tidak dapat kelebihan beban, tidak dapat melewati referensi, tidak ada c++ :)


Kedengarannya seperti kekacauan nama C++.


Seperti yang telah disebutkan oleh jawaban lain, ini kemungkinan karena kerusakan nama C++. Jika Anda ingin simbol dapat diakses dengan nama 'unmangled', dan diimplementasikan dalam C++, Anda perlu kami extern "C" untuk memberi tahu kompiler C++ bahwa ia memiliki tautan C.

Di header yang memiliki prototipe fungsi, Anda akan menginginkan sesuatu seperti:

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

// the prototype for start()...


#if defined(__cplusplus)
}
#endif

Ini akan memastikan bahwa jika fungsi digunakan oleh kompiler C++, itu akan mendapatkan extern "C" pada deklarasi, dan jika digunakan oleh modul C, tidak akan tertukar dengan extern "C" penentu.

Implementasi Anda dalam file .cpp tidak memerlukan hal itu jika Anda menyertakan header sebelum definisi fungsi. Itu akan menggunakan spesifikasi tautan yang dilihatnya dari deklarasi sebelumnya. Namun, saya lebih memilih untuk tetap menghiasi definisi fungsi dengan extern "C" hanya untuk memastikan semuanya sinkron (perhatikan bahwa dalam file .cpp Anda tidak memerlukan #ifdef hal-hal preprocessing - itu akan selalu dikompilasi sebagai C++.


Linux
  1. Output Dari Perintah "terakhir"?

  2. Output Dari Perintah Yang Digunakan Untuk Input Ke Cd?

  3. Contoh Perintah tee di Linux

  1. Melihat output penuh dari perintah PS

  2. Nomor perangkat dalam keluaran perintah stat

  3. Antarmuka baris perintah C++

  1. Cara Menyimpan Output Perintah ke File di Linux

  2. Ubah output menjadi string

  3. Mengarahkan output perintah di buruh pelabuhan