<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div>So I got the following error when attempting to load the plugin that was compiled without linking against any clang or LLVM libs:<br></div>
<div> </div>
<blockquote><div>error: unable to load plugin 'myPlugin.so': 'myPlugin.so: undefined symbol:<br></div>
<div>
      _ZTVN5clang12ast_matchers11MatchFinder13MatchCallbackE'<br></div>
</blockquote><div> </div>
<div>But then I realized that libASTMatchers is not loaded by 
Clang when doing --analyze (since it is not used by the Static Analyzer), so I have to link against it in the plugin. 
Doing so and using --allow-shlib-undefined when compiling the plugin 
works on both the 32-bit and 64-bit machines.<br></div>
<div> </div>
<div>Thank you all very much for your help!<br></div>
<div> </div>
<div id="sig19426269"><div class="signature">-- <br></div>
<div class="signature">  Gábor Kozár -- ShdNx<br></div>
<div class="signature">  kozargabor@gmail.com<br></div>
<div class="signature"> </div>
</div>
<div> </div>
<div> </div>
<div>On Thu, Sep 5, 2013, at 2:19, Jordan Rose wrote:<br></div>
<blockquote type="cite"><div>These are link arguments when compiling your plugin, and like Laszlo said you should use them instead of linking to the Clang libraries, since they'll be found by the dynamic linker at runtime.<br></div>
<div> </div>
<div>I'd guess that in 32 bits things get linked differently and either don't overlap or can't easily be reported...or perhaps just aren't reported for historical reasons.<br></div>
<div> </div>
<div>Jordan<br></div>
<div> </div>
<div> </div>
<div><div>On Sep 4, 2013, at 2:11 , Gábor Kozár <<a href="mailto:kozargabor@gmail.com">kozargabor@gmail.com</a>> wrote:<br></div>
<div> </div>
<blockquote type="cite"><div><div>Thanks Jordan. My issue is that this error is reported when I try running clang. So where do I specify these args? When compiling Clang, or when compiling my plugin...?<br></div>
<div> </div>
<div>Also, it doesn't really explain why everything works fine on the 32-bit system.<br></div>
<div> </div>
<div><div>-- <br></div>
<div>  Gábor Kozár -- ShdNx<br></div>
<div>  <a href="mailto:kozargabor@gmail.com">kozargabor@gmail.com</a><br></div>
<div> </div>
</div>
<div> </div>
<div> </div>
<div>On Tue, Sep 3, 2013, at 18:08, Jordan Rose wrote:<br></div>
<blockquote type="cite"><div>Right. On a Mac there's a heavy-handed way to do this ("-undefined dyamic_lookup") and a lighter way ("-bundle_loader path/to/clang"). According to  the flag on Linux might be --allow-shlib-undefined or --unresolved-symbols=ignore-in-object-files; I don't know if there's an equivalent to -bundle_loader.<br></div>
<div> </div>
<div>Jordan<br></div>
<div> </div>
<div> </div>
<div><div>On Sep 3, 2013, at 8:50 , Gábor Kozár <<a href="mailto:kozargabor@gmail.com">kozargabor@gmail.com</a>> wrote:<br></div>
<div> </div>
<blockquote type="cite"><div><div>Thanks Laszlo, you make good points, I'll investigate.<br></div>
<div> </div>
<div><div>-- <br></div>
<div>  Gábor Kozár<br></div>
<div>  <a href="mailto:kozargabor@gmail.com">kozargabor@gmail.com</a><br></div>
<div> </div>
</div>
<div> </div>
<div> </div>
<div>On Tue, Sep 3, 2013, at 16:52, Laszlo Nagy wrote:<br></div>
<blockquote type="cite"><div>Hi Gabor,<br></div>
<div> </div>
<blockquote><blockquote><div>#1 you should not link any Clang<br></div>
<div>library against when you make your plugin<br></div>
</blockquote><div> </div>
<div>How do I not link against any Clang library when I'm writing a Clang plugin?<br></div>
<div>I need to use Clang's classes extensively.<br></div>
</blockquote><div> </div>
<div>Sound weird, but works just fine. Your plugin will be loaded by the<br></div>
<div>Clang binary, and it already loaded the needed symbols. That's why you<br></div>
<div>don't need to explicitly link against them... You can look at<br></div>
<div><a href="https://github.com/rizsotto/Constantine">https://github.com/rizsotto/Constantine</a> for cmake example.<br></div>
<div> </div>
<blockquote><div>In the meanwhile, I realize that I have done it all with the assumption that<br></div>
<div>GCC 4.7.2 and Clang 3.3 generate compatible binaries. Could this be the<br></div>
<div>source of the issue? I'll try self-hosting Clang 3.3 and see what happens<br></div>
<div>then.<br></div>
</blockquote><div> </div>
<div>I do compile my plugin with GCC and Clang is able to load it without<br></div>
<div>problem.<br></div>
<div> </div>
<div>My two cents are still on the llvm::cl classes. Although you are not<br></div>
<div>using them, but the libraries that you are link against might. (That's<br></div>
<div>why I was suggest not to do that.) And not to mention the fact, that<br></div>
<div>the messages are emitted by the CommandLine.cpp:144. See also:<br></div>
<div> </div>
<div>  <a href="http://comments.gmane.org/gmane.comp.compilers.clang.devel/6870">http://comments.gmane.org/gmane.comp.compilers.clang.devel/6870</a><br></div>
<div>  <a href="http://comments.gmane.org/gmane.comp.compilers.clang.scm/63478">http://comments.gmane.org/gmane.comp.compilers.clang.scm/63478</a><br></div>
<div> </div>
<div>Regards,<br></div>
<div>Laszlo<br></div>
</blockquote></div>
<div>

_______________________________________________<br></div>
<div>cfe-dev mailing list<br></div>
<div><a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br></div>
<div><a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br></div>
</blockquote></div>
<div> </div>
<div> </div>
</blockquote></div>
</blockquote></div>
<div> </div>
<div> </div>
</blockquote></body>
</html>