Trochę używane cechą archiwizatora GNU jest skrypt archiwum, jest prosty, ale potężny interfejs, a to może zrobić dokładnie to, co chcesz, na przykład jeśli poniższy skrypt nazywa script.ar:
CREATE libNewColor.a
ADDLIB libColor.a
ADDLIB libRGB.a
ADDLIB libPixel.a
SAVE
END
Następnie można wywołać ar następująco:
ar -M < script.ar
i dostaniemy libNewColor.a, który zawiera wszystkie pliki z .o libColor.a libRGB.a i libPixel.a.
Dodatkowo można również dodać zwykłe.o pliki, jak również z polecenia ADDMOD:
CREATE libNewColor.a
ADDLIB libColor.a
ADDLIB libRGB.a
ADDLIB libPixel.a
ADDMOD someRandomCompiledFile.o
SAVE
END
Ponadto jest to bardzo proste do wygenerowania tych skryptów w Makefile, więc zazwyczaj stworzyć nieco ogólną regułę makefile do tworzenia archiwów, które faktycznie generuje skrypt i wywołuje ar na scenariusz. Coś takiego:
$(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)
Choć teraz, gdy patrzę na to myślę, że to nie działa, jeśli $ (obiekty) jest pusta (czyli jeśli po prostu chcesz się połączyć archiwa bez dodawania dodatkowych plików obiektowych), ale będę pozostawić go jako ćwiczenie dla czytelnika, aby rozwiązać ten problem, w razie potrzeby ...: D
Oto docs dla tej funkcji:
https://sourceware.org/binutils/docs/binutils/ar-scripts.html#ar-scripts
można alternatywnie spojrzeć na http: // stackoverflow. com/questions/8170450/combine-static-library/8170851 # 8170851 i użyj libt ool – Bruce
Należy zauważyć, że krok minimalizacji naprawdę nie jest konieczny. W przypadku bibliotek statycznych linker pobierze tylko pliki obiektów, których potrzebuje, w przeciwieństwie do bibliotek współdzielonych, które zawierają wszystko. Istnieją powody i korzyści dla każdego podejścia; oni są po prostu inni. I naprawdę nie musisz się martwić podczas pracy z bibliotekami statycznymi. –