Search code examples
makefilelinkergnu-makelinker-flags

What do link editor (LD) params mean?


I write NASM (netwide assembler) program and for some reasons I needed to use some functions written in C. So, I tried to link compiled C object files with compiled Assembly objects using ld link editor. I did it by this way :

ld -m elf_x86_64 -lc --dynamic-linker=/lib64/ld-linux-x86-64.so.2 object_files -o program.

And it didn't want to link and work long enough until I picked up the necessary parameters. Now this works as expected with this parameter set. But I don't understand the meaning of -lc and --dynamic-linker=/lib64/ld-linux-x86-64.so.2. What do they do ?


Solution

    1. -lc - link c standard library
    2. --dynamic-linker=/lib64/ld-linux-x86-64.so.2. - set the program loader. Linux ELF binaries have a field for this.

    Afaik the latter is needed even for static binaries, anything other will confuse the loader, and it won't execute.

    man ld lists its parameters.