Dalam C , melebihkan pengendali baharu dan padamkan dengan perpustakaan malloc/percuma tersuai boleh menyebabkan untuk memautkan ralat apabila menggabungkan perpustakaan statik dengan kod C. Walaupun memastikan susunan pemautan yang betul, ralat rujukan yang tidak ditentukan mungkin timbul disebabkan oleh penggumpalan nama.
Penyusun C menggunakan mekanisme yang dipanggil name mangling, yang mengubah suai nama fungsi untuk memasukkan butiran seperti parameter dan jenis pulangan. Ini memastikan bahawa fungsi terlampau beban dengan tandatangan berbeza boleh wujud bersama dalam atur cara.
Apabila memautkan perpustakaan C statik dengan kod C, pemaut mengharapkan nama fungsi daripada pustaka untuk memadankan nama hancur yang dijana oleh pengkompil C. Walau bagaimanapun, pengkompil C tidak menggunakan name mangling.
Untuk menyelesaikan isu ini, sertakan pengisytiharan fungsi yang merujuk kepada pustaka C dalam extern "C "sekat. Ini menyekat pencabulan nama untuk pengisytiharan dalam blok, membenarkan pemaut mengenal pasti fungsi dengan betul.
extern "C" { #include "libxmalloc.h" }
Selain itu, pengisytiharan fungsi dalam fail pengepala boleh dibalut seperti ini:
#if defined (__cplusplus) extern "C" { #endif /* * Plain C function declarations here ... */ #if defined (__cplusplus) } #endif
Dengan menyekat pemusnahan nama, penyambung boleh mencari definisi simbol yang betul dalam perpustakaan statik dan menyelesaikan rujukan yang tidak ditentukan kesilapan.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Rujukan Tidak Ditakrifkan' Apabila Memautkan Perpustakaan Statik C dengan Kod C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!