[llvm-dev] Orc JIT vs. STL
Praveen Velliengiri via llvm-dev
llvm-dev at lists.llvm.org
Tue Aug 27 08:32:08 PDT 2019
I tried it, but I can't able to reproduce it.
std::ifstream stream1, stream2;
I didn't get undefined symbols error. I used
DynamicLibrarySearchGenerator::GetForCurrentProcess API to make symbols
from STL visible to ORC JIT.
On Tue, 27 Aug 2019 at 20:36, Geoff Levner <glevner at gmail.com> wrote:
> On Tue, Aug 27, 2019 at 4:56 PM Praveen Velliengiri
> <praveenvelliengiri at gmail.com> wrote:
> > HI
> > Did you run the static constructor and destructor? How did you make your
> process symbols visible to ORC jit?
> Yes. It's the constructor that generates the undefined symbol error.
> We use DynamicLibrary::LoadLibraryPermanently(nullptr) to add process
> > Could you please share us the for what symbols you get undefined
> references :-)
> Certainly! Mangled:
> And unmangled:
> std::basic_istream<char, std::char_traits<char>
> >::swap(std::basic_istream<char, std::char_traits<char> >&)
> std::basic_filebuf<char, std::char_traits<char>
> >::swap(std::basic_filebuf<char, std::char_traits<char> >&)
> Incidentally, if I call that STL swap() function in the application,
> to ensure it is in the process symbols, the second symbol is found,
> but the first is still undefined.
> > On Aug 27, 2019 8:18 PM, "Geoff Levner via llvm-dev" <
> llvm-dev at lists.llvm.org> wrote:
> >> Greetings, LLVM wizards.
> >> We are using Clang and Orc JIT (v1) to compile and execute C++ code on
> the fly. If a C++ module calls functions from external libraries, we add
> them via DynamicLibrary::LoadLibraryPermanently().
> >> The problem we have run into recently is when a module calls a function
> from the STL -- in particular this swap() function for input streams:
> >> #include <fstream>
> >> std::ifstream stream1, stream2;
> >> stream1.swap(stream2);
> >> When we run the constructors for the module, we get two undefined
> symbols. And explicitly adding libstdc++ doesn't help. It turns out that
> the missing symbols are defined not in the runtime DSO but in an archive
> >> So my questions are:
> >> 1. Is there a simple way to get access to all symbols defined in the
> STL? Intuitively, it seems like we should not need to know about such
> compiler magic.
> >> 2. If there is no magical solution, is there a way to explicitly add
> symbols from an archive?
> >> Thanks,
> >> Geoff
> >> _______________________________________________
> >> LLVM Developers mailing list
> >> llvm-dev at lists.llvm.org
> >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev