2

非常に大きなオブジェクト ファイルが生成されて困っています。VxWorks 5.5.1 を使用していますが、GCC 4.1.2 も利用できます。

私たちのモジュールのサイズは約 6.2MB で、それを減らす方法を探しています。この問題は、主にテンプレートの過度の使用が原因のようです。を使用してファイル内のシンボルをダンプするとnm、1.8MB のテキスト ファイルが得られます。これは、ファイルのほぼ 1/3 が名前だけであることを示しています。ファイルサイズを小さくする方法はありますか?

次のアプローチは機能しませんでした。

  • --strip-all効果がないようです-出力は使用と同じです--strip-debug
  • そのプラットフォームではサポートされていないため、使用できません--gc-sections(オプションは単に無視されます)。

VxWorks がロード時にコードをリンクすることは理解していますが、リンクする必要があるのは C++ ランタイム ライブラリのみであり、シンボルをグローバル シンボル テーブルに追加したくないため、その情報を削除する方法が必要です。 、 右?

参考までに、私のリンカーのバージョンは次のとおりです。

i386-wrs-vxworks-ld.exe --version
>>> GNU ld (Wind River VxWorks G++ DWARF-EH 4.1-131) 2.17.50.20070509 
>>> SPR fixes: cq103489 cq111170 cq116027 cq116652 cq118878 cq125145

と私のコンパイラのバージョン:

i386-wrs-vxworks-g++.exe --version
>>> i386-wrs-vxworks-g++.exe (GCC) 4.1.2
4

2 に答える 2

4

オブジェクトからシンボルを取り除きたいという意味がわかります。しかし、すべてのシンボルを削除すると、アプリケーションを開始するためのエントリ ポイントとして使用するシンボルがなくなります。しかし、あなたにはまだ選択肢があると思います。残念ながら、VxWorks 5 の C++ コンパイラはあまり効率的ではないことで知られています。

アプリケーションを *.a (アーカイブ - 別名スタティック ライブラリ) にコンパイルした場合、ビルド時にこれをオペレーティング システムにリンクし、usrAppInit.c 内からこれを呼び出すことができます。これにより、シンボルの削除、または少なくともオプションのダウンロード済みシンボル テーブルへの移動が可能になります。アプリケーション ビルド プロパティから、[マクロ] タブを選択し、アーカイブを LIBS マクロに追加します。

アーカイブを作成するには、ビルド プロパティに移動して [ルール] タブを選択し、ドロップダウン ボックスから [アーカイブ] を選択します。

OS のサイズを (アプリケーションがリンクされた状態で) 調整するには、vxworks の設定を変更します。できるだけ多くのコンポーネントを無効にします。また、ダウンロードしたシンボル テーブルを必ず使用してください (開発ツール コンポーネント -> シンボル テーブル コンポーネント -> シンボル テーブル初期化コンポーネント -> シンボル テーブル初期化の選択 -> ダウンロード済みシンボル テーブル)。これにより、OS からすべてのシンボルが取り除かれ、ダウンロード可能なシンボル テーブルが作成されます。このテーブルは、起動後にダウンロードしてデバッグできます。

幸運を!

PS。コンパイラでデバッグ (-g) がオフになっていることを確認してください。コンパイラ スイッチを投稿していただければ、さらにお役に立てるかもしれません。

于 2013-08-21T20:28:49.370 に答える
0

これを処理する通常の方法は、画像を圧縮することです。また、ブート ROM をビルドして、実行前に RAM に解凍できるようにする必要があります。これを可能にする標準のmakefileオプションがあると思います。

于 2013-09-25T19:46:39.860 に答える