2

次のような問題に対処しようとしています。

以下から作成されたライブラリ libxyz.a があるとします。

/* main.c */
int main(void)
{
  int a;
}

以下を使用してコンパイルおよびアーカイブ:

gcc -c main.c -o abc.o && ar cr libxyz.a abc.o

abc.o を期待される場所に正確に配置するには、リンカー スクリプトをどのように作成する必要がありますか?

私はそのような方法でそれを処理しようとしていました:

/* script.ld */
SEARCH_DIR(.)
INPUT(-lxyz)
SECTIONS
{
   .text : { xyz:abc(.text) }
   .data : { xyz:abc(.data) }
   .bss  : { xyz:abc(.bss) }
}

しかし、実行後:

ld -T script.ld

私は得る:

ld: cannot find xyz:abc

フォーラムのリンカー ファイルでアーカイブを抽出する例は見つかりませんでした。私が見つけた唯一のものは、構造に関する情報のみを含むリンカのドキュメントでしたarchive:file

4

2 に答える 2

3

今日同じ問題に対処しなければならなかったので、他の誰かがこの質問に出くわした場合: 一部のファイル拡張子がありません。次のようなものが正常に動作します。

SECTIONS
{
   .text : { libxyz.a:abc.o(.text) }
   .data : { libxyz.a:abc.o(.data) }
   .bss  : { libxyz.a:abc.o(.bss) }
}

パスも処理する必要があります (ライブラリが実際にどこか/libxyz.a の場合)。

于 2014-01-08T09:45:24.863 に答える
0

私のマシンであなたのスクリプトを試してみたところ、エラーなく正しく実行されたため、おそらく ld に問題があります。私の ld バージョンは GNU ld (GNU Binutils for Ubuntu) 2.22 です。

于 2013-01-08T13:53:07.427 に答える