<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>I’m trying to understand why using a local memcpy with LTO results in a “multiple definition” error. <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I have an local (optimized) mempy.c (clearly simplified!):<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>void* memcpy(void* dest, const void* src, unsigned int count) {<o:p></o:p></p><p class=MsoNormal>  return 0;<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>void* __aeabi_memcpy(void *dest, const void *src, unsigned int size) {<o:p></o:p></p><p class=MsoNormal>  return memcpy(dest,src,size);<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal>---<o:p></o:p></p><p class=MsoNormal>I also have a simple main.c  to test it out (also simplified):<o:p></o:p></p><p class=MsoNormal>#include <stdio.h><o:p></o:p></p><p class=MsoNormal>#include <string.h><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>struct {<o:p></o:p></p><p class=MsoNormal>  char name[40];<o:p></o:p></p><p class=MsoNormal>} person;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>char myname[] = "abcd";<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>int main ()<o:p></o:p></p><p class=MsoNormal>{<o:p></o:p></p><p class=MsoNormal>  memcpy ( person.name, myname, strlen(myname)+1 );<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>  printf ("name :%s\n", person.name );<o:p></o:p></p><p class=MsoNormal>  return 0;<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal>---<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>During compilation with:<o:p></o:p></p><p class=MsoNormal>clang -O0 memcpy.c -o memcpy.o  -c<o:p></o:p></p><p class=MsoNormal>ar cr memcpy.a memcpy.o<o:p></o:p></p><p class=MsoNormal>clang –O0 -o memcpyTest.exe  -flto -static main.c  memcpy.a <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I get a multiple definition of memcpy error. Now building it with –fno-builtin works fine. I’m trying to understand what is happening behind the scenes that requires my use of –fno-builtin (or –Wl,--allow-multiple-definitions). Did the backend put in references to libc that are trying to get resolved before loading the optimized archive? I also notice that replacing memcpy.a with memcpy.o works just fine as well. Can someone give me some insight?<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’ve found <a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55994">this discussion</a> regarding GCC that seems to center around the same issue. <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Daniel <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>--<o:p></o:p></p><p class=MsoNormal>Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>