GCC C Linker Error: Undefined Rujukan kepada Virtual Tables and Constructors
Dalam C , fungsi maya membenarkan kelas terbitan mengatasi kaedah yang ditakrifkan dalam mereka kelas asas. Apabila memautkan atur cara yang menggunakan fungsi maya, pemaut memerlukan takrif kaedah ini untuk hadir dalam fail objek. Kegagalan untuk memberikan takrifan ini mengakibatkan ralat rujukan tidak ditentukan, seperti:
Mungkin Punca
Ralat ini boleh berlaku atas pelbagai sebab, termasuk:
Mengesahkan Perpustakaan Statik dan Ketersediaan Kelas
Bitness Perpustakaan: Untuk menyemak sama ada perpustakaan statik adalah 64-bit, gunakan arahan fail:
file -L <library_path>
Ia sepatutnya menunjukkan objek kongsi 64-bit x86-64 jika pustaka adalah 64-bit.
Ketersediaan Kelas: Gunakan perintah objdump -t untuk menyemak sama ada perpustakaan mengandungi yang khusus kelas:
objdump -t <library_path> | grep <class_name>
Jika kelas ada, ia akan disenaraikan dalam output.
Contoh Isu
Seperti yang ditunjukkan dalam log ralat yang disediakan, rujukan yang tidak ditentukan kepada SomeClass::close() menunjukkan bahawa kelas telah digunakan tetapi tidak ditakrifkan. Begitu juga, rujukan yang tidak ditentukan kepada SomeClass::SomeClass() dan vtable untuk SomeOtherClass mencadangkan bahawa pembina dan jadual maya untuk kelas SomeOtherClass tidak ditakrifkan dalam fail objek.
Penyelesaian
Untuk menyelesaikan isu ini, pastikan semua fungsi maya ditakrifkan dalam kanak-kanak yang sesuai kelas, fail pengepala yang diperlukan disertakan dan perpustakaan yang betul dipautkan ke program anda.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat Penyambung 'Rujukan Tidak Ditakrifkan kepada Jadual Maya dan Pembina' dalam GCC C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!