0

我正在尝试改进一个 1GB 共享库的构建时间,该共享库是从 ~400 个依赖项构建的,然后剥离到 100MB。依赖项没有被剥离,所以我认为如果我之前预先剥离依赖项(或者只是-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 个字节。有什么办法可以避免这种差异,并让这两种方法产生相同的二进制文件?

4

1 回答 1

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

现在二进制文件是相同的。

于 2017-08-01T20:25:20.620 回答