Itu bukan bug karena ld
berperilaku seperti spesifikasinya. Halaman manual dari ld
2.28 berbunyi:
Jika linker tidak dapat mengenali format file objek, itu akan dianggap sebagai skrip linker. Skrip yang ditentukan dengan cara ini menambah skrip penaut utama yang digunakan untuk tautan (baik skrip penaut default atau yang ditentukan dengan menggunakan -T). Fitur ini memungkinkan penaut untuk menautkan ke file yang tampak sebagai objek atau arsip, tetapi sebenarnya hanya mendefinisikan beberapa nilai simbol, atau menggunakan "INPUT" atau "GROUP" untuk memuat objek lain. Menentukan skrip dengan cara ini hanya menambah skrip tautan utama, dengan perintah tambahan ditempatkan setelah skrip utama; gunakan opsi -T untuk mengganti skrip linker default seluruhnya, tetapi perhatikan efek dari perintah "INSERT".
TL;DR☺. Singkatnya:Dalam kebanyakan kasus, pengguna tidak mengetahui skrip tautan yang mereka gunakan karena "skrip utama" (=skrip default ) disediakan oleh rantai alat. Skrip utama sangat mengacu pada intrinsik dari bagian yang dibuat oleh kompiler dan Anda harus mempelajari tali untuk mengubahnya. Sebagian besar pengguna tidak.
Pendekatan umum untuk menyediakan skrip Anda sendiri adalah melalui -T
pilihan. Dengan begitu, skrip penaut utama diabaikan dan skrip Anda mengambil alih kendali atas tautan tersebut. Tapi Anda harus menulis semuanya dari awal.
Jika Anda hanya ingin menambahkan fitur minor, Anda dapat menulis spesifikasi ke dalam file dan menambahkan nama file ke baris perintah ld
(atau gcc / g++) tanpa -T
pilihan. Dengan begitu skrip linker utama masih melakukan pekerjaan utama tetapi file Anda menambahnya. Jika Anda menggunakan pendekatan ini, Anda mendapatkan pesan dari tajuk utas ini untuk memberi tahu Anda bahwa Anda mungkin telah memberikan objek yang rusak secara tidak sengaja.
Sumber kebingungan ini adalah tidak ada cara untuk menentukan peran file tambahan. Ini dapat dengan mudah diselesaikan dengan menambahkan opsi lain ke ld
seperti -dT
opsi untuk “d efault scriptfile”:Perkenalkan -sT
opsi untuk “s file skrip tambahan”.
Ini bug di versi LD tertentu. Abaikan saja untuk saat ini, atau lihat apakah distro Anda memiliki pembaruan untuk LD Anda. (paket binutils)
http://www.freepascal.org/faq.var#unix-ld219