2011-12-12 8 views
5

私はCスタティックライブラリを提供し、可能な限り内部実装を隠したいと思っています。私は自分のコードにobfuscatorというコードを使用しています。これは、人間にとってシンボルをincomprhensibleにするためにはうまく機能します。私はxcc4を使用していますが、GCCにフラグがあると仮定しています。静的ライブラリのオブジェクトファイル名を隠すには?

私の問題は私のライブラリがまだ私は非表示にしたり、人間に理解できないしたいと思い読めるの情報が含まれていることです:私はまだ見、私は.AでNMを実行すると :

の1-オブジェクト・ファイル名を各オブジェクトファイルの名前。 (myObect1.o myObject2.oなど)。私の.aからこれらの名前を削除する方法はありますか?

2ファイルパス: ライブラリで文字列を実行すると、ヘッダーファイルといくつかの.cファイルパス(#includeとしてインクルードされています)のパスが表示されます。これらも削除する方法はありますか? (GCCフラグなど)?あなたは助けるために

おかげで、

馬場

PS:私はnmおよび文字列について知っていますが、他のツールを知っているかどうかは、私はきちんと私の中に隠されている確認する必要があります何かを提案することができます。すべての提案は大歓迎です。

+1

[GNU strip](http://linux.die.net/man/1/strip)が望むことができるかどうかを確認してください。 –

答えて

2

SQLiteのように合併を配ることを検討してください:http://www.sqlite.org/amalgamation.html。つまり、ライブラリではなく、単一の.oファイルと単一の.hファイルを配布します。

内部関数に静的な注釈を付ける必要があります。これにより、コンパイラは最適化の機会をさらに提供します。 Luaはそのような注釈を使用します。たとえばhttp://www.lua.org/source/5.1/ldo.h.htmlを参照してください。合併の場合、LUAI_FUNCは静的と定義される。

+0

ありがとうございます!しかし、1つの質問:内部関数を静的なものとして宣言することのメリットは何ですか(その名前はすでに難読化されており、人間が読めるわけではありません)。また静的関数を宣言することで、たとえばiosのような埋め込みプレートフォームのような問題を引き起こすことができますか?静的キーワードの使用に慣れていないだけで、組み込みプラットフォームで静的変数を宣言することの限界について聞いたことがあります。それは機能のために同じだろうか? – Baba

+0

@Babaは、私が言ったように、静的関数は、より良いコードを生成し、それらをインライン化することもできます。静的関数は静的変数と実際には同じではありません。モジュールの外側には表示されないという事実だけを共有します。いいえ、静的関数は組み込みプラットフォームで問題を起こすべきではありません。 – lhf

関連する問題