X86TargetMachineModule not helping

Hi all,

After creating a new LLVM-based project, I faced an odd problem. ExecutionEngine::create always retuned null. After some investigation I found out that it was due to the target architecture not getting registered. I’m using Visual C++ 2005 and in the X86TargetMachine.cpp file an extern variable X86TargetMachineModule is created to ‘ensure’ that the module is linked in. It works for the example projects, but not for the one I created. When I write a value to X86TargetMachineModule in another module, all is fine and dandy…

Although it’s a viable workaround for now I was wondering if anyone knew a more elegant solution, or has an explanation why X86TargetMachineModule works for the example projects but not for mine.


Nicolas Capens

This is probably a Windows specific issue. If your subject contains Windows, perhaps some of the folks who are using llvm on Windows might chime in.



In Visual Studio 2005, you can force the linker to include specific symbols. In your project, under “Configuration Properties/Linker/Input/Force Symbol References”, try adding _X86TargetMachineModule.

Hope that helps!

Stein Pedersen

Very interesting trick, thanks Stein!