アーカイブファイルをリンクしているときにライブラリのバージョン情報をelfファイルに追加するにはどうすればよいですか?すべてのアーカイブファイルにはバージョン情報がありますか?

Govardhan Reddy

オブジェクトファイルをいくつかのアーカイブファイルにリンクしてELFファイルを作成しています。しかし、ELFファイルで「what」コマンドを実行すると、すべてではなく一部のアーカイブファイルのlib情報(バージョン)のみが表示されます。

ELFファイルがすべてのアーカイブファイルにリンクされていても、一部のファイルの情報しかないのはなぜですか?(追記:すべてのアーカイブファイルにはバージョン情報があります。以下の例を確認してください)

例:

$ ld -o bos_epb.ppc.elf a.o b.o c.o -L/home/xrava/lib/powerpc \
  --start-group -lgcc -lm -lcrt -lsslcrypto -lssh --end-group

ELFファイルで「what」を実行すると、libcrtに関するlib情報のみが表示され、すべてではありません。

$ what bos_epb.ppc.elf
bos_epb.ppc.elf:
    Lib crt swfp version BL910288
    C Run Time Library
    Built Fri 22 Apr 2016 23:31:21 +0200 by tefo@
    Copyright 2016 XXXXXXX

私のすべてのアーカイブにはバージョン情報がありますが、libcrtを除いてこれをelfに書き込んでいません。

>>what libssh.a 
libssh.a: 
Lib ssh swfp version BL910291 
SSH Built Wed 27 Apr 2016 23:36:24 +0200 by tefo@ 
Copyright 2016 XXXXXXXX
雇用されたロシア人

私のすべてのアーカイブにはバージョン情報がありますが、libcrtを除いてこれをelfに書き込んでいません。

この結果を理解するには、理解する必要があります

  1. どのようにwhatコマンドが動作し、
  2. リンカーのしくみ。

ショーで。whatコマンドは非常に簡単です:それは探して任意のバイナリをスキャンして、「特別な」記号列で始まるASCII文字列@(#)とプリントそのシーケンス(で終わる次の任意の文字列NULの文字が)。ドキュメント

@(#) Lib ssh swfp version BL910291リンクされた実行可能ファイルbos_epb.ppc.elf文字列を表示するには、その文字列を含むオブジェクトファイルを選択しlibssh.aて実行可能ファイルの一部にする必要があります。これにより、上記の問題2が発生します。

そのようなオブジェクトがに存在するという理由だけでlibssh.a、それが最終的なバイナリにリンクされるとは想定できません。リンカがオブジェクトを最終的な実行可能ファイルに含めるかどうかを決定するために使用するアルゴリズムは、ここまたはここで説明されています

あなたはできるgarantee全体がいることをlibssh.a利用して、最終的なバイナリに含まれている-Wl,--whole-archive -lssh -Wl,--no-whole-archiveが、これはある病気-advised。バイナリのリンクに失敗する可能性があり、本来よりも大きくなること保証されています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ