2016-11-21 13 views
0

BusyBox Linuxで実行できる単一のファットバイナリにUbuntu 16.04(zbackupなど)でプログラムをコンパイルしようとしています。私はカスタマイズされたCMAKEスクリプトを使用して、バイナリを4MB +にする次のオプションとリンクしています。これは大丈夫です、バイナリに物事が押し込まれているようです。glibcリンキングが壊れた小さなバイナリを生成する

-lcrypto 
    -lz 
    -ldl 
    -static-libstdc++ 
    -static-libgcc 

次私は-staticオプションを追加して、バイナリが実際に約2メガバイト+で小さくなって、それが壊れて再構築するときが不足している最後のピースを含めることができるように-staticフラグを追加してみてください。バイナリを実行しようとすると、単純にfile or folder not found

オプションが原因で出力バイナリが壊れている原因を突き止めることができません。

+0

警告:警告:静的にリンクされたアプリケーションで 'dlopen'を使用すると、リンクに使用されたglibcバージョンの共有ライブラリが実行時に必要になるのですか? – Eric

+0

-staticでバイナリの 'objdump -t'を実行し、バイナリには-1を、diffを実行します。 -staticがlibstdC++とlibgccをリンクさせているように思えます。 – user2766918

+0

@ericターゲットのビジョンボックスで作業バイナリ(-staticなし)を実行すると、エラー '/lib/libc.so.6:version 'GLIBC_2.7 'が見つかりませんでした。しかし、壊れたバイナリ(-staticで)に対してファイルやフォルダが見つかりません。コンパイル時にCMAKEはエラー出力を表示しません。 @ user2766918 objdumpからの出力は両方のファイルにとって巨大です。どこにdiffのテキストが表示される山のどこから始めるかわからない(約10ページ分) – pieterk

答えて

1

gccのmanページから:動的リンクをサポートするシステムで-static

、これは、共有ライブラリとのリンクを防止します。他のシステムでは、このオプションには 効果がありません。

このように、いくつかの共有ライブラリへのリンクができなくなります。これはあなたを壊しているものであり、それを小さくしている可能性があります。暗号ライブラリなどにリンクしていない可能性があります。また、前後にobjdump -tを使用して、どのシンボルが消えているか把握してください。

関連する問題