[llvm-dev] [EXT] Cross compiling an empty program results in a segfault

Eli Friedman via llvm-dev llvm-dev at lists.llvm.org
Fri Apr 12 12:31:46 PDT 2019

“--entry main” is not going to do what you want; the entry point for a Linux program is not equivalent to the C “main”.  http://dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html has a description of how a C program normally starts on Linux.

Generally, to build a C program, you don’t want to invoke the linker directly; instead, use clang to invoke the linker correctly.  This will pass the appropriate flags and link against the appropriate libraries.  When you’re cross compiling, to make this work, you have to actually have the appropriate libraries, so you’ll have to build or download them separately.  Then you tell clang the path to those libraries using –sysroot.  https://clang.llvm.org/docs/CrossCompilation.html has a general description of various issues with cross-compiling.


From: llvm-dev <llvm-dev-bounces at lists.llvm.org> On Behalf Of Ivan Medoedov via llvm-dev
Sent: Wednesday, April 10, 2019 1:28 PM
To: llvm-dev at lists.llvm.org
Subject: [EXT] [llvm-dev] Cross compiling an empty program results in a segfault


I'm trying to cross compile an empty program on macOS for Linux:

cat test.c

int main() {
        int a = 2+3;
        return 0;

clang -o -c -target x86_64-linux-gnu test.c

If I copy the resulting test.o to the Linux machine and run clang test.o, it works fine.

However if I try to link it on macOS, I get a segfault when I launch ./a.out

ld.lld --entry main test.o

[copy a.out to Linux]

segmentation fault 0x00000000001 in ?? ()

Would really appreciate your help here!

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190412/576de9eb/attachment.html>

More information about the llvm-dev mailing list