<div dir="ltr"><div dir="ltr"><div dir="ltr">The reason I was trying to link it myself is because clang failed:<div><br></div><div>ld: unknown option: --eh-frame-hdr<br></div><div><br></div><div>My host is macOS, trying to compile for Linux:</div><div><br></div><div>clang -target x86_64-pc-linux-gnu -o main_linux main.c<br></div><div><br></div><div>main.c is an empty program with 0 dependencies.</div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, May 4, 2019 at 1:43 AM Ivan Medoedov <<a href="mailto:ivan.medoedov@gmail.com">ivan.medoedov@gmail.com</a>> wrote:<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">Sorry for the late reply.<div><br></div><div>Thanks, Eli. That was really helpful.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Apr 12, 2019 at 9:31 PM Eli Friedman <<a href="mailto:efriedma@quicinc.com" target="_blank">efriedma@quicinc.com</a>> wrote:<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 lang="EN-US">
<div class="gmail-m_3314934104908363380gmail-m_-3470985768971086145WordSection1">
<p class="MsoNormal">“--entry main” is not going to do what you want; the entry point for a Linux program is not equivalent to the C “main”. 
<a href="http://dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html" target="_blank">
http://dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html</a> has a description of how a C program normally starts on Linux.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">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. 
<a href="https://clang.llvm.org/docs/CrossCompilation.html" target="_blank">https://clang.llvm.org/docs/CrossCompilation.html</a> has a general description of various issues with cross-compiling.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">-Eli<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt solid blue;padding:0in 0in 0in 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0in 0in">
<p class="MsoNormal"><b>From:</b> llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>> <b>On Behalf Of
</b>Ivan Medoedov via llvm-dev<br>
<b>Sent:</b> Wednesday, April 10, 2019 1:28 PM<br>
<b>To:</b> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<b>Subject:</b> [EXT] [llvm-dev] Cross compiling an empty program results in a segfault<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<div>
<div>
<p class="MsoNormal">Hello,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I'm trying to cross compile an empty program on macOS for Linux:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">cat test.c<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">int main() {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        int a = 2+3;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">        return 0;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">}<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">clang -o -c -target x86_64-linux-gnu test.c<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">If I copy the resulting test.o to the Linux machine and run clang test.o, it works fine.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">However if I try to link it on macOS, I get a segfault when I launch ./a.out<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">ld.lld --entry main test.o<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">[copy a.out to Linux]<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">./a.out<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">segmentation fault 0x00000000001 in ?? ()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Would really appreciate your help here!<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks<u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

</blockquote></div>
</blockquote></div>