Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

undefined reference to `dl_iterate_phdr'

Tags:

gcc

linker

ld

I need an help!! I am trying to build a standalone executable ie without ANY dynamic linking.

I wrote a small test program, generated a relocatable object file for it called test.o. When I try to build the standalone executable using GNU linker I get the below error:

$ld -static -o test test.o /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/libc.a /usr/lib/gcc/i486-linux-gnu/4.4/libgcc.a /usr/lib/gcc/i486-linux-gnu/4.4/libgcc_eh.a /usr/lib/gcc/i486-linux-gnu/4.4/libgcc_eh.a(unwind-dw2-fde-glibc.o): In function _Unwind_Find_FDE': (.text+0x190b): undefined reference todl_iterate_phdr'

How to resolve the undefined symbol dl_iterate_phdr. In which archive this symbol is present?

Thanks!!!

EDIT1:

Just in case if I am not very clear, my motive is to generate a standalone executable ie an executable which is completely ready for execution while it gets loaded into memory i.e.) all symbol resolution and relocation is done by program linker itself instead of dynamic linker. Is it possible to generate such an executable?

FINAL UPDATE:

Now I got it to get complied with ld directly using the below command:

$ld -static -o test /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.4.3/crtbeginT.o /usr/lib/gcc/i486-linux-gnu/4.4.3/crtend.o test.o --start-group /usr/lib/gcc/i486-linux-gnu/4.4.3/libgcc.a /usr/lib/gcc/i486-linux-gnu/4.4.3/libgcc_eh.a /usr/lib/libc.a --end-group

man ld says --start-group archives --endgroup is used to resolve circular references!! Also i find symbol dl_iterate_phdr is defined in libc.a.

Thanks all for your help!!

like image 919
Bala Avatar asked Feb 18 '23 21:02

Bala


1 Answers

When I try to build the standalone executable using GNU linker

Don't. Use of ld to link any user-space program is most often a bug. Your link line is certainly incorrect.

Use compiler driver to do the heavy lifting for you. This should work:

gcc -static -o test test.o

I am looking to use ld since I wanted to build a standalone executable

What makes you believe that GCC-built executable is less stand-alone than ld-built one? Whatever it is, you are mistaken: gcc simply invokes ld with correct arguments.

like image 139
Employed Russian Avatar answered Mar 16 '23 03:03

Employed Russian