c++ - compilar - g++ no se reconoce como un comando interno o externo
g++ enlace parcial en lugar de archivos? (2)
Se pierde un efecto importante de tener los archivos de objetos en un archivo ar
, que es el único en el que se vincularán los objetos referenciados.
Si tiene tanto foo.o
con el símbolo foo
y bar.o con la bar
símbolos en un archivo ar
, y solo hace referencia al símbolo foo
, solo se vinculará foo.o
Si en su lugar hace un enlace parcial, los contenidos de ambos terminará en el ejecutable, incluso si nunca se hace referencia a la bar
ninguna parte.
También puedes probar un enlazador más rápido, como el oro .
Soy bastante nuevo en el flujo de compilación de C ++, y estoy pensando en cambiar para usar enlaces parciales para mis bibliotecas en lugar de crear archivos ar
. Espero reducir el tiempo de enlace en un inevitable paso final de compilación que tengo, y me imagino que la vinculación parcial de algunas bibliotecas podría ahorrarme tiempo al vincular todo en ese paso final.
Es lo que estoy describiendo como posible? Me imagino que debería ser algo ld -Ur -o mylib.o [components]
. ¿Hay consideraciones de construcción importantes que no estoy teniendo en cuenta?
La otra vez que desea usar ld -r para hacer un enlace parcial es si tiene algunos archivos de objeto que contienen inicialización estática que son necesarios para proporcionar cierta funcionalidad, pero que nunca son llamados directamente por ninguno de los códigos.
¡Si quieres puedo escribir un documento que muestre cómo funciona esto y por qué funciona!
(ver registro de clase C ++ en tiempo de ejecución, por ejemplo, usa una función de registro estático que se registra en un registro, que luego puede usarse para crear y devolver un Base * con comportamiento polimórfico, ya que creó un nuevo objeto heredado de Base. Ver el conocimiento de tiempo de ejecución C ++ de las clases, que es una respuesta a una pregunta que hice).