BusyBox Linuxで実行できる単一のファットバイナリにUbuntu 16.04(zbackupなど)でプログラムをコンパイルしようとしています。私はカスタマイズされたCMAKEスクリプトを使用して、バイナリを4MB +にする次のオプションとリンクしています。これは大丈夫です、バイナリに物事が押し込まれているようです。glibcリンキングが壊れた小さなバイナリを生成する
-lcrypto
-lz
-ldl
-static-libstdc++
-static-libgcc
次私は-static
オプションを追加して、バイナリが実際に約2メガバイト+で小さくなって、それが壊れて再構築するときが不足している最後のピースを含めることができるように-static
フラグを追加してみてください。バイナリを実行しようとすると、単純にfile or folder not found
オプションが原因で出力バイナリが壊れている原因を突き止めることができません。
警告:警告:静的にリンクされたアプリケーションで 'dlopen'を使用すると、リンクに使用されたglibcバージョンの共有ライブラリが実行時に必要になるのですか? – Eric
-staticでバイナリの 'objdump -t'を実行し、バイナリには-1を、diffを実行します。 -staticがlibstdC++とlibgccをリンクさせているように思えます。 – user2766918
@ericターゲットのビジョンボックスで作業バイナリ(-staticなし)を実行すると、エラー '/lib/libc.so.6:version 'GLIBC_2.7 'が見つかりませんでした。しかし、壊れたバイナリ(-staticで)に対してファイルやフォルダが見つかりません。コンパイル時にCMAKEはエラー出力を表示しません。 @ user2766918 objdumpからの出力は両方のファイルにとって巨大です。どこにdiffのテキストが表示される山のどこから始めるかわからない(約10ページ分) – pieterk