2011-12-08 4 views
1

glibc-2.13/nptl/sigaction.cで、私は単純にprintf("test\n");を入れてglibcのコンパイルに失敗します。 printfを追加すると、_itoaの複数定義がdl-addr.cから得られます。理由はわかりません。glibcコンパイルでprintfを追加したdl-addr.cから複数定義エラー

なぜこのような可能性があり解決できるのか教えてください。エラー:

test/glibc-build/libc_pic.a(_itoa.os): In function `_itoa': 
test/glibc-2.13/stdio-common/_itoa.c:215: multiple definition of 
`_itoa' 
test/glibc-build/elf/dl-allobjs.os:test/glibc-2.13/elf/dl-minimal.c:300: first defined here 
test/glibc-build/libc_pic.a(dl-addr.os): In function `_dl_addr_inside_object': 
test/SOURCE/glibc-2.13/elf/dl-addr.c:156: multiple definition of 
`_dl_addr_inside_object' 
test/glibc-build/elf/dl-allobjs.os:glibc-2.13/elf/dl-open.c:658: first defined here 

答えて

1

Just adding a printf gives me multiple definitions of _itoa

ことをしないでください。

Glibcは非常に複雑で、修正するときに何をしているのかを知る必要があります。将来的には全体エラーメッセージ、それだけではなく部分を表示してください。何が起こっている

elf/ld.soのリンクは(あなたが失敗しているものを対象言わなかったが、私はそれがld.soだかなり確信して失敗したということです)。

ld.soは最終的にlibc.so.6printfにあなたのプログラムを結合するダイナミックリンカ、です。明白な理由から、ld.so自体はprintfに動的にリンクすることはできません - libc.so.6mmapであった前に実行する必要があります。したがって、それは実行するためにちょうど十分なlibc.aの最小限の部分でリンクします。 printfは最小限のランタイムに含まれていないため、「単に呼び出しを追加する」ことはできません。

+0

http://sourceware.org/ml/libc-help/2011-06/msg00009.html – Kapil

関連する問題