Una característica poco usada del archivador de GNU es la secuencia de comandos de archivo, que es una interfaz sencilla pero potente, y puede hacer exactamente lo que quiere, por ejemplo, si el siguiente script se llama script.ar:
CREATE libNewColor.a
ADDLIB libColor.a
ADDLIB libRGB.a
ADDLIB libPixel.a
SAVE
END
entonces se podría invocar ar de la siguiente manera:
ar -M < script.ar
y que se obtendría libNewColor.a que contiene todos los archivos .o de libColor.a libRGB.a y libPixel.a.
Además, también puede agregar regularmente.o archivos, así como con el comando ADDMOD:
CREATE libNewColor.a
ADDLIB libColor.a
ADDLIB libRGB.a
ADDLIB libPixel.a
ADDMOD someRandomCompiledFile.o
SAVE
END
Además, es muy fácil de generar estos scripts en Makefile, por lo que suelen crear una regla makefile bien genérica para la creación de archivos que en realidad genera la secuencia de comandos e invoca ar en el guión. Algo como esto:
$(OUTARC): $(OBJECTS)
$(SILENT)echo "CREATE [email protected]" > $(ODIR)/$(ARSCRIPT)
$(SILENT)for a in $(ARCHIVES); do (echo "ADDLIB $$a" >> $(ODIR)/$(ARSCRIPT)); done
$(SILENT)echo "ADDMOD $(OBJECTS)" >> $(ODIR)/$(ARSCRIPT)
$(SILENT)echo "SAVE" >> $(ODIR)/$(ARSCRIPT)
$(SILENT)echo "END" >> $(ODIR)/$(ARSCRIPT)
$(SILENT)$(AR) -M < $(ODIR)/$(ARSCRIPT)
Aunque ahora que lo miro supongo que no funciona si $ (objetos) está vacío (es decir, si lo que desea es combinar archivos sin añadir archivos de objetos adicionales) pero lo haré dejarlo como un ejercicio para el lector a solucionar ese problema, si es necesario ...: D
Aquí están los documentos para esta función:
https://sourceware.org/binutils/docs/binutils/ar-scripts.html#ar-scripts
Usted puede mirar alternativamente en la dirección http: // stackoverflow. com/questions/8170450/combine-static-libraries/8170851 # 8170851 y use libt ool – Bruce
Tenga en cuenta que el paso de minimización realmente no es necesario. Con las bibliotecas estáticas, el vinculador solo obtendrá los archivos objeto que necesita, a diferencia de las bibliotecas compartidas que incluyen todo. Hay razones y ventajas para cada enfoque; simplemente son diferentes. Y realmente no necesita preocuparse mientras trabaja con bibliotecas estáticas. –