<div dir="ltr"><div dir="ltr">On Thu, May 14, 2020 at 11:04 AM Ivan Medoedov via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hello,<div><br></div><div>I'm trying to compile a Linux hello world executable on macOS.</div><div><br></div><div>The first step is simple:</div><div><br></div><div><font face="monospace">clang -c -target x86_64-linux-gnu -c -o hello.o hello.c<br></font></div><div><br></div><div>But linking results in an error:</div><div><br></div><div><div><font face="monospace">ld.lld --sysroot=/linuxroot/ -o hello -m elf_x86_64 \</font></div><div><font face="monospace">  -dynamic-linker /lib64/ld-linux-x86-64.so.2 \</font></div><div><font face="monospace">  /lib/crt1.o \</font></div><div><font face="monospace">  /usr/lib/x86_64-linux-gnu/crti.o ../hello.o \</font></div><div><font face="monospace">  /usr/lib/x86_64-linux-gnu/libc.so \</font></div><div><font face="monospace">  /usr/lib/x86_64-linux-gnu/crtn.o</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">ld.lld: error: cannot open /lib/crt1.o: No such file or directory<br></font></div><div><font face="monospace">ld.lld: error: cannot open /usr/lib/x86_64-linux-gnu/crti.o: No such file or directory<br></font></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></blockquote><div><br></div><div>--sysroot affects some library search paths, but it doesn't affect paths directly given to the linker. In the above command line, you are directly specifying object file and so file paths without -l, so the linker looks at the only given locations. This is an expected behavior.</div><div><br></div><div>I think, unlike some other linkers, --sysroot option isn't very useful for lld, because lld doesn't have a notion of built-in default search paths. You always have to specify library search paths by -L option to lld. So why don't you specify library directories with -L, like this?</div><div><br></div><div>$ ld.lld -o hello -m elf_x86-64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -L /linuxroot/usr/lib -lc /linuxroot/usr/lib/x86_64-linux-gnu/crtn.o</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><div><font face="monospace"></font></div><div><br></div></div><div><font face="monospace">/linuxroot/</font> contains all the necessary files copied from a Linux machine:</div><div><font face="monospace">/linuxroot/lib/crt1.o, /linuxroot/usr/lib/x86_64-linux-gnu/crti.o</font>, etc<br></div><div><br></div><div>It works if I use a full path for each file (<font face="monospace">-dynamic-linker /linuxroot/lib64/ld-linux-x86-64.so.2 ...</font>), but the resulting binary doesn't work on Linux, because it's dynamically linked to /linuxroot/... which is missing on the Linux box.</div><div><br></div><div><div><font face="monospace">file hi</font></div><div><font face="monospace">hi: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /linuxroot/lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, not stripped</font></div></div><div><br></div><div>The only way I can make it work is to have actual <font face="monospace">/usr/lib/x86_64-linux-gnu/crti.o</font> etc on my macOS box, which --sysroot is supposed to help avoid.</div><div><br></div><div>I'm sure I'm missing something simple here. I've been following the docs, but couldn't figure it out on my own.</div><div><br></div><div>Thanks!</div><div><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div>