<div dir="ltr">Adding Steven Wu who can hopefully help as this is MacOS. Unfortunately, I don't have a way to run the MacOS compiler myself, and it uses the old LTO API which I am less familiar with. Typically these issues happen if you don't use llvm-ar, but it looks like you are using that so I'm not sure.<div><br></div><div>Teresa</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jul 22, 2020 at 12:29 AM Tobias Hieta <<a href="mailto:tobias@plexapp.com" target="_blank">tobias@plexapp.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">David,<br>
<br>
Thanks for looking into this. I did a small reproduction on my machine<br>
outside of my build system. So here is how to reproduce:<br>
<br>
Download <a href="https://downloads.xiph.org/releases/ogg/libogg-1.3.4.tar.xz" rel="noreferrer" target="_blank">https://downloads.xiph.org/releases/ogg/libogg-1.3.4.tar.xz</a><br>
Download llvm-10.0.1 macOS binary<br>
<br>
export PATH=<path to llvm/bin>:$PATH<br>
export SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk<br>
<br>
untar libogg<br>
AR=llvm-ar CC=clang CXX=clang++ CFLAGS="-flto=thin<br>
-mmacosx-version-min=10.9" LDFLAGS=-flto=thin ./configure<br>
--disable-shared --enable-static<br>
make -j20<br>
<br>
Then try to link to the library in a small C++ program - I used this:<br>
<br>
#include <iostream><br>
#include "ogg/ogg.h"<br>
<br>
using namespace std;<br>
<br>
int main()<br>
{<br>
ogg_stream_state os;<br>
if (ogg_stream_init(&os, 123) == 0)<br>
cout << "Initialized stream succesfully" << endl;<br>
<br>
return 0;<br>
}<br>
<br>
And from the libogg directory I linked to it like this:<br>
<br>
clang++ -o test -flto=thin test.cpp src/.libs/libogg.a -I include<br>
<br>
undef: _ogg_stream_init<br>
Undefined symbols for architecture x86_64:<br>
"_ogg_stream_init", referenced from:<br>
_main in 0.x86_64.thinlto.o<br>
ld: symbol(s) not found for architecture x86_64<br>
clang-10: error: linker command failed with exit code 1 (use -v to see<br>
invocation)<br>
<br>
hope this helps - thanks!<br>
<br>
On Wed, Jul 22, 2020 at 9:11 AM David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>> wrote:<br>
><br>
> Got a link to the source/build instructions?<br>
><br>
> This sort of thing happens more often in C++ with templates where one<br>
> object depends (incorrectly) on an implicit instantiation created in<br>
> another object, rather than carrying its own instantiation.<br>
><br>
> Not sure what might cause it in C code.<br>
><br>
> On Tue, Jul 21, 2020 at 11:47 PM Tobias Hieta via llvm-dev<br>
> <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>
> ><br>
> > Hello,<br>
> ><br>
> > I am building libogg with clang (10.0.1) on macOS and if I pass<br>
> > "-flto=thin" to C and LDFLAGS it will not link correctly claiming<br>
> > missing symbols when linking to the archive (libogg.a).<br>
> ><br>
> > undef: _ogg_stream_init<br>
> > Undefined symbols for architecture x86_64:<br>
> > "_ogg_stream_init", referenced from:<br>
> > _main in lto.o<br>
> ><br>
> > Removing lto=thin fixes the problem. Inspecting the AR libs with<br>
> > llvm-nm I see the symbol there (but without address):<br>
> ><br>
> > not working archive:<br>
> > ---------------- T _ogg_stream_init<br>
> ><br>
> > working archive:<br>
> > 0000000000000200 T _ogg_stream_init<br>
> ><br>
> > My guess is that this output is correct since the archive contains<br>
> > bitcode in the thin lto case and otherwise it's the finished object.<br>
> ><br>
> > It seems to me that the LTO decides to not include this symbol? It's<br>
> > defined like this:<br>
> ><br>
> > extern int ogg_stream_init(ogg_stream_state *os,int serialno);<br>
> ><br>
> > llvm-ar is used to create the archive.<br>
> ><br>
> > Is there any good way to debug this?<br>
> ><br>
> > Thanks,<br>
> > Tobias<br>
> > _______________________________________________<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><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><span style="font-family:Times;font-size:medium"><table cellspacing="0" cellpadding="0"><tbody><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small"><td nowrap style="border-top:2px solid rgb(213,15,37)">Teresa Johnson |</td><td nowrap style="border-top:2px solid rgb(51,105,232)"> Software Engineer |</td><td nowrap style="border-top:2px solid rgb(0,153,57)"> <a href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.com</a> |</td><td nowrap style="border-top:2px solid rgb(238,178,17)"><br></td></tr></tbody></table></span></div></div></div>