Я пытаюсь улучшить время сборки общей библиотеки 1 ГБ, которая построена из ~ 400 зависимостей, а затем сокращена до 100 МБ.
Зависимости не удаляются, поэтому я думаю, что это может произойти быстрее, если я предварительно обрежу зависимости раньше (или просто создаю их без -g
с самого начала).
Тестирование этой библиотеки требует больших усилий, но я могу избежать тестирования, если новый процесс сборки создает точно такой же двоичный файл.
Я сделал небольшой тест для этого, только с одним файлом C ++, lib.cc
:
int lib1_f1(int x) {
return x + x;
}
int lib1_f2(int x) {
return x*x;
}
А вот и Makefile:
diff: res1.so res2.so
./hexdump-diffuse $^
res1.so: lib.cc.o.1
g++ -fPIC -shared -o $@ $^
strip $@
res2.so: lib.cc.o.2
g++ -fPIC -shared -o $@ $^
strip $@
# with -g
%.cc.o.1: %.cc
g++ -g -O2 -std=c++11 -c $^ -o $@
# without -g
%.cc.o.2: %.cc
g++ -O2 -std=c++11 -c $^ -o $@
install-tools:
sudo apt-get install diffuse bsdmainutils
.PHONY: install-tools diff
Вот скрипт, который я использую для сравнения двоичных файлов:
#!/bin/bash
hexdump -v -C $1 > /tmp/mydiff.1
hexdump -v -C $2 > /tmp/mydiff.2
diffuse /tmp/mydiff.1 /tmp/mydiff.2
Разница между двоичными файлами, которые я получаю, составляет около 10 байтов. Есть ли способ избежать этой разницы, и оба метода выдают одинаковые двоичные файлы?
Благодаря подсказке я запустил это:
objdump -xD res1.so > res1.objdump
objdump -xD res2.so > res2.objdump
diffuse res1.objdump res2.objdump
Что привело меня к использованию этого для команды strip:
strip --remove-section=.note.gnu.build-id
Теперь двоичные файлы одинаковые.
Других решений пока нет …