[llvm-dev] [lib/support] Questions about loadable modules on Windows

Reid Kleckner via llvm-dev llvm-dev at lists.llvm.org
Mon Nov 2 14:28:54 PST 2015


Plugins for opt are expected to reference symbols defined in the main
executable, rather than linking in another copy of LLVM libraries and
globals.

LLVM and Clang were developed on Linux and Mac, where this is a common
technique. On Windows, it is much harder to do this, although it is
possible. Instead, it is much more common to move most of the application
logic into a DLL and link plugins against that.

I think you can load passes into opt if you build LLVM as a DLL (cmake
-DLLVM_BUILD_LLVM_DYLIB=ON), and link your pass against LLVM.dll. I've
never attempted this personally, but it should work. :)

On Sun, Nov 1, 2015 at 11:53 PM, Markus Himmel via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> Hi,
>
>
>
> I have been playing around with a custom pass which is built out-of-source
> using CMake. It works as expected on Linux. I have also built the pass and
> llvm trunk (separately) using Visual Studio. However when running `opt
> –load=… -help` on Windows, the –load directive appears to work but the
> passes defined in the .dll are not displayed. In several places it is
> suggested that this is due to dynamic linking not being supported on
> Windows (e.g. [1]). However, I do not fully understand this explanation,
> since there does in fact appear to be Run-Time Dynamic Linking on Windows
> [2], and this is even implemented in
> lib/Support/Windows/DynamicLibrary.inc. I would greatly appreciate someone
> explaining in a little more detail why dynamic linking of loadable modules
> is not supported on Windows, or if it is and I’m just doing something wrong.
>
>
>
> Thanks a lot,
>
> Markus
>
>
>
> [1]
> http://uu-kk.blogspot.de/2012/02/llvm-pass-on-windows-integrating-with.html
>
> [2]
> https://msdn.microsoft.com/en-us/library/windows/desktop/ms685090(v=vs.85).aspx
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151102/e5237313/attachment.html>


More information about the llvm-dev mailing list