[llvm-dev] Creating a static library with OpenMP offloading code

Kai Plociennik via llvm-dev llvm-dev at lists.llvm.org
Thu Apr 15 05:21:24 PDT 2021


Dear all,

I have a question w.r.t. creating a *static* library containing OpenMP 
offloading code.

Using Clang/LLVM 9, I can successfully create an executable from source 
files with OpenMP target regions by creating a *shared* library and 
linking everything with clang++ in the style

clang++ -fpic -fopenmp -fopenmp-targets=... -c file_a.cpp
clang++ -fpic -fopenmp -fopenmp-targets=... -c file_b.cpp
clang++ -shared -fopenmp -fopenmp-targets=... -o liboffload.so file_a.o 
file_b.o
clang++ -fopenmp -fopenmp-targets=... -loffload -o main main.o

However, I did not succeed in doing this with a *static* library. Since 
I do not know of any argument I can give to clang++ to create a static 
instead of shared library, I tried with llvm-ar, since I assume it is 
OpenMP-offloading-aware.

So I did

llvm-ar r liboffload.a file_a.o file_b.o

and when I objdump liboffload.a, it contains offloading-related symbols 
such as .omp_offloading.entries and __CLANG_OFFLOAD_BUNDLE__..., so 
everything seems OK.

But when I try something like

clang++ -fopenmp -fopenmp-targets=... -loffload -o main main.o

I get undefined references for functions in liboffload.a, and when I add 
liboffload.a to the arguments, I get an executable, but at runtime the 
offload entries for the target regions are missing.

So my question is: Is there a way of getting this to work with a static 
instead of shared library? I would appreciate an answer a lot.

Thanks in advance for any help,

Kai

-- 
Dr. Kai Plociennik
Fraunhofer-Institut für Techno- und Wirtschaftsmathematik ITWM
Competence Center High Performance Computing
Fraunhofer-Platz 1
67663 Kaiserslautern
Tel: +49 (0)631 31600 0
mail: kai.plociennik at itwm.fraunhofer.de
www.itwm.fraunhofer.de


More information about the llvm-dev mailing list