[llvm-dev] Orc JIT vs. STL

Geoff Levner via llvm-dev llvm-dev at lists.llvm.org
Tue Aug 27 07:47:12 PDT 2019


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 file:

/opt/rh/devtoolset-6/root/usr/lib/gcc/x86_64-redhat-linux/6.3.1/libstdc++.a

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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190827/be00e98c/attachment.html>


More information about the llvm-dev mailing list