Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyelesaikan Ralat \'Rujukan Tidak Ditakrifkan kepada\' Apabila Memautkan Perpustakaan Statik C dengan Kod C?
rujukan tidak jelas kepada Ralat dalam Memautkan Perpustakaan Statik C dengan Kod C
Apabila cuba memautkan perpustakaan C statik dengan kod C, anda boleh menghadapi ralat "rujukan tidak ditentukan", walaupun mengubah susunan pautan. Isu ini timbul daripada nama simbol yang berbeza yang dicipta oleh kompilasi C dan C yang dikenali sebagai 'name mangling'.
Dalam C , pemaut memaparkan nama simbol demangled dalam mesej ralat, yang boleh mengelirukan. Memeriksa fail objek (*.o) dengan "nm -u" mendedahkan bahawa nama simbol yang dirujuk tidak sepadan dengan nama dalam pustaka.
Untuk menyelesaikan isu ini, fungsi dipautkan sebagai luaran yang disusun menggunakan Pengkompil C mesti mempunyai pengisytiharan fungsinya yang disertakan dalam blok "C" {}" luaran. Ini menindas nama C mencampurkan semua dalam blok.
Contohnya:
<code class="cpp">extern "C" { #include <dual/xalloc.h> #include <dual/xmalloc.h> }</code>
Sebagai alternatif, anda boleh membungkus pengisytiharan fungsi dalam fail pengepala seperti berikut:
<code class="cpp">#if defined (__cplusplus) extern "C" { #endif /* * Put plain C function declarations here ... */ #if defined (__cplusplus) } #endif</code>
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \'Rujukan Tidak Ditakrifkan kepada\' Apabila Memautkan Perpustakaan Statik C dengan Kod C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!