Hello,I'm trying to compile a Linux hello world executable on macOS.The first step is simple:clang -c -target x86_64-linux-gnu -c -o hello.o hello.cBut linking results in an error:ld.lld --sysroot=/linuxroot/ -o hello -m elf_x86_64 \-dynamic-linker /lib64/ld-linux-x86-64.so.2 \/lib/crt1.o \/usr/lib/x86_64-linux-gnu/crti.o ../hello.o \/usr/lib/x86_64-linux-gnu/libc.so \/usr/lib/x86_64-linux-gnu/crtn.old.lld: error: cannot open /lib/crt1.o: No such file or directoryld.lld: error: cannot open /usr/lib/x86_64-linux-gnu/crti.o: No such file or directory
/linuxroot/ contains all the necessary files copied from a Linux machine:/linuxroot/lib/crt1.o, /linuxroot/usr/lib/x86_64-linux-gnu/crti.o, etcIt works if I use a full path for each file (-dynamic-linker /linuxroot/lib64/ld-linux-x86-64.so.2 ...), but the resulting binary doesn't work on Linux, because it's dynamically linked to /linuxroot/... which is missing on the Linux box.file hihi: 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 strippedThe only way I can make it work is to have actual /usr/lib/x86_64-linux-gnu/crti.o etc on my macOS box, which --sysroot is supposed to help avoid.I'm sure I'm missing something simple here. I've been following the docs, but couldn't figure it out on my own.Thanks!
_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
You misunderstand GNU ld's --sysroot rule, which is applicable in these two cases:
* when a path begins with "=" or "$SYSROOT"
* https://www.sourceware.org/binutils/docs/ld/File-Commands.html
"In case a sysroot prefix is configured, and the filename starts with
the ‘/’ character, and the script being processed was located inside
the sysroot prefix, the filename will be looked for in the sysroot
prefix."
For your case, you need a linker script located under /linuxroot/, which
INPUT or GROUP an absolute path.