компиляция — C ++: получить один и тот же двоичный файл после полосы с и без & quot; -g & quot;

Я пытаюсь улучшить время сборки общей библиотеки 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 байтов. Есть ли способ избежать этой разницы, и оба метода выдают одинаковые двоичные файлы?

0

Решение

Благодаря подсказке я запустил это:

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

Теперь двоичные файлы одинаковые.

0

Другие решения

Других решений пока нет …