我正在尝试改进一个 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 个字节。有什么办法可以避免这种差异,并让这两种方法产生相同的二进制文件?