objcopyを使用してxmlファイルをオブジェクトファイルに変換しようとしています。このオブジェクトファイルは、RHEL5上の別の共有ライブラリにリンクされて使用されます。このコマンドでファイルを変換します:
objcopy --input-format binary --output-target i386-pc-linux-gnu --binary-architecture i386baselines.xmlbaselines.0
オブジェクトファイルが作成され、readelfを使用すると次のようになります。
シンボルテーブル'.symtab'には、次の5つのエントリが含まれます。 DEFAULT 1 _binary_baselines_xml_end 4:0000132b 0 NOTYPE GLOBAL DEFAULT ABS _binary_baselines_xml_siz
サイズがそこにあるように見えます。ファイルをダンプし、xmlがオフセット34(.data値で指定)にASCIIとして埋め込まれていること、およびそれが正しいことを確認しました。変数で指定されているように、データのサイズは0x132bバイトです。
次に、コードで、いくつかの変数を宣言します。
extern "C"
{
extern char _binary_baselines_xml_start;
extern char _binary_baselines_xml_size;
}
static const char* xml_start = &_binary_baselines_xml_start;
const uint32_t xml_size = reinterpret_cast<uint32_t>(&_binary_baselines_xml_size);
これに足を踏み入れると、xmlポインターが正しく、デバッガーでxmlテキストを確認できます。ただし、サイズ記号は値を0x132b(これは私が望むものです)として示していますが、「アドレス0x132bが範囲外です」ことも示しています。変数を使用すると、非常に大きな誤った乱数になります。char *、char []、int、int*などのextern変数を宣言するために、他のあらゆる種類の構文を試しました。結果は常に同じです。価値はありますが、私はそれに到達できないようです。
もう1つの興味深い点は、このコードは、extern変数にアンダースコアを追加しなくても、Windowsマシンで正常に機能することですが、それ以外はすべて同じです。
私はこの方法でobjcopyを使用することについてオンラインで多くを見つけることができないようですので、どんな助けでも大いに感謝されます。