ошибка множественного определения из dl-addr.c с добавлением printf при компиляции glibc - PullRequest
1 голос
/ 08 декабря 2011

В glibc-2.13/nptl/sigaction.c я просто положил printf("test\n");, и моя компиляция glibc не удалась.Просто добавление printf дает мне несколько определений _itoa из 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 Ответ

1 голос
/ 09 декабря 2011

Простое добавление printf дает мне несколько определений _itoa

Не делай , что .

Glibc довольно сложен, и вам нужно знать, что вы делаете, когда вы его модифицируете.

Происходит сбой ссылки на elf/ld.so (вы не сказали, какая цель не достигла цели, но я уверен, что это ld.so; в будущем, пожалуйста, покажите ошибку whole сообщение, а не только его части).

ld.so - это динамический компоновщик , который в конечном итоге свяжет вашу программу с printf в libc.so.6. По очевидной причине ld.so сам не может динамически связываться с printf - он должен исполниться до того, как libc.so.6 будет mmap ed. Таким образом, он ссылается на минимальные части libc.a, достаточные для его запуска. printf не является частью этого минимального времени выполнения, поэтому вы не можете «просто добавить к нему вызов».

...