2017-08-01 5 views
0

〜400の依存関係から構築された1GB共有ライブラリのビルド時間を改善し、100MBにしました。 依存関係は取り除かれていないので、前もって依存関係を事前に取り除くか(または単に最初から-gせずにビルドすると)、ビルドが速くなるかもしれないと思っています。 このライブラリのテストは大変な作業ですが、新しいビルドプロセスがまったく同じバイナリを生成するかどうかをテストすることはできません。C++: "-g"の有無にかかわらず、同じバイナリを取得

私はちょうど1 C++ファイル、lib.ccで、このための小さなテストを行った。ここで私はバイナリを比較するために使用するスクリプトです

diff: res1.so res2.so 
    ./hexdump-diffuse $^ 

res1.so: lib.cc.o.1 
    g++ -fPIC -shared -o [email protected] $^ 
    strip [email protected] 

res2.so: lib.cc.o.2 
    g++ -fPIC -shared -o [email protected] $^ 
    strip [email protected] 

# with -g 
%.cc.o.1: %.cc 
    g++ -g -O2 -std=c++11 -c $^ -o [email protected] 

# without -g 
%.cc.o.2: %.cc 
    g++ -O2 -std=c++11 -c $^ -o [email protected] 

install-tools: 
    sudo apt-get install diffuse bsdmainutils 

.PHONY: install-tools diff 

int lib1_f1(int x) { 
    return x + x; 
} 
int lib1_f2(int x) { 
    return x*x; 
} 

そして、ここではMakefileのです

#!/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

違いがどこにあるかを確認するには、2つのファイルに対して「objdump -x」を試して、結果を比較することができます。これにより、どのセクションが異なるサイズであるかを確認できるようになります。次に、他のobjdumpオプションを使用して、その違いを確認することができます。そのことを知っていれば、どちらの場合でも同じことをするためにコンパイラ/リンカを得ることができるかもしれません。 – sheltond

答えて

0

おかげで、私はこれを実行しました:

stripコマンドのためにこれを使用して私を導く
objdump -xD res1.so > res1.objdump 
objdump -xD res2.so > res2.objdump 
diffuse res1.objdump res2.objdump 

strip --remove-section=.note.gnu.build-id 

は今のバイナリは同じです。

関連する問題