No es un error porque ld
se comporta como su especificación. La página man de ld
2.28 dice:
Si el enlazador no puede reconocer el formato de un archivo de objeto, supondrá que se trata de una secuencia de comandos del enlazador. Una secuencia de comandos especificada de esta manera aumenta la secuencia de comandos del enlazador principal utilizada para el enlace (ya sea la secuencia de comandos del enlazador predeterminada o la especificada mediante -T). Esta función permite que el enlazador se vincule con un archivo que parece ser un objeto o un archivo, pero que en realidad simplemente define algunos valores de símbolo o usa "ENTRADA" o "GRUPO" para cargar otros objetos. Especificar una secuencia de comandos de esta manera simplemente aumenta la secuencia de comandos del enlazador principal, con los comandos adicionales ubicados después de la secuencia de comandos principal; use la opción -T para reemplazar por completo la secuencia de comandos del enlazador predeterminado, pero tenga en cuenta el efecto del comando "INSERTAR".
TL; DR ☺. En pocas palabras:en la mayoría de los casos, los usuarios no conocen la secuencia de comandos del enlazador que están utilizando porque se trata de una "secuencia de comandos principal" (=secuencia de comandos predeterminada). ) es proporcionada por la cadena de herramientas. El script principal se refiere en gran medida a los elementos intrínsecos de las secciones generadas por el compilador y tienes que aprender a cambiarlo. La mayoría de los usuarios no.
El enfoque común para proporcionar su propia secuencia de comandos es a través de -T
opción. De esa manera, el script del enlazador principal se ignora. y su secuencia de comandos toma el control sobre el enlace. Pero tienes que escribir todo desde cero.
Si solo desea agregar una función menor, puede escribir sus especificaciones en un archivo y agregar el nombre del archivo a la línea de comando de ld
(o gcc / g++) sin el -T
opción. De esa manera, la secuencia de comandos principal del enlazador sigue haciendo el trabajo principal, pero su archivo lo aumenta. Si usa este enfoque, recibirá el mensaje del encabezado de este hilo para informarle que es posible que haya proporcionado un objeto roto sin querer.
La fuente de esta confusión es que no hay manera de especificar el rol del archivo adicional. Esto podría resolverse fácilmente agregando otra opción a ld
como el -dT
opción para “d efault scriptfile”:Introduzca un -sT
opción para “s archivo de script complementario”.
Es un error en ciertas versiones de LD. Simplemente ignórelo por ahora, o vea si su distribución tiene una actualización para su LD. (paquete binutils)
http://www.freepascal.org/faq.var#unix-ld219