https://gitlab.com/eztrace/eztrace/-/issues/70

---
 src/eztrace-lib/CMakeLists.txt           |    4 ++--
 src/eztrace-lib/eztrace_mpi_core.c       |   12 ++++++------
 src/eztrace-lib/eztrace_mpi_core_empty.c |    1 +
 src/modules/mpi/CMakeLists.txt           |   13 ++++++++++++-
 4 files changed, 21 insertions(+), 9 deletions(-)

--- a/src/eztrace-lib/CMakeLists.txt
+++ b/src/eztrace-lib/CMakeLists.txt
@@ -50,14 +50,14 @@ set(CMAKE_C_COMPILER ${MPICC})
 set(CMAKE_Fortran_COMPILER ${MPIF90})
 
 set(eztrace-mpi_core_SOURCES
-  eztrace_mpi_core.c
+  eztrace_mpi_core_empty.c
   include/eztrace-lib/eztrace_mpi.h
   )
 
 if(CMAKE_Fortran_COMPILER)
   # mpif.h may define a bunch of unused parameter which would generate lots of warnings
   set(eztrace-mpi_core_SOURCES ${eztrace-mpi_core_SOURCES}
-    eztrace_mpi_core_f.f90  eztrace_mpi_core_fortran.c)
+    )
   
   set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Wno-unused-parameter")
 endif()
--- a/src/modules/mpi/CMakeLists.txt
+++ b/src/modules/mpi/CMakeLists.txt
@@ -2,6 +2,8 @@ file(GLOB mpi_function_files mpi_funcs/*
 
 set(eztrace-mpi_SOURCES
     ${mpi_function_files}
+    ../../eztrace-lib/eztrace_mpi_core.c
+    ../../eztrace-lib/include/eztrace-lib/eztrace_mpi.h
     mpi.c
     mpi_eztrace.h
     )
@@ -13,7 +15,9 @@ set(CMAKE_Fortran_COMPILER ${MPIF90})
 if(CMAKE_Fortran_COMPILER)
   # mpif.h may define a bunch of unused parameter which would generate lots of warnings
   set(eztrace-mpi_SOURCES ${eztrace-mpi_SOURCES}
-    mpi3_f.f90  fortran_utils.f90  mpi_f.f90   mpi_fortran.c)
+    mpi3_f.f90  fortran_utils.f90  mpi_f.f90   mpi_fortran.c
+    ../../eztrace-lib/eztrace_mpi_core_f.f90
+    ../../eztrace-lib/eztrace_mpi_core_fortran.c)
   
   set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Wno-unused-parameter")
 endif()
@@ -31,9 +35,16 @@ target_include_directories(eztrace-mpi
 
 target_link_libraries(eztrace-mpi
   PRIVATE
+    ${OTF2_LIBRARY}
+    atomic
     ${INTERCEPT_LIB}
     eztrace-core
     eztrace-lib
+    dl
+  PRIVATE
+    ${CMAKE_DL_LIBS}
+    rt
+    m
 )
 
 target_compile_options(eztrace-mpi
--- a/src/eztrace-lib/eztrace_mpi_core.c
+++ b/src/eztrace-lib/eztrace_mpi_core.c
@@ -34,8 +34,8 @@ int (*libMPI_Init_thread)(int*, char***,
 int (*libMPI_Comm_size)(MPI_Comm, int*);
 int (*libMPI_Comm_rank)(MPI_Comm, int*);
 int (*libMPI_Finalize)(void);
-int (*libMPI_Initialized)(int*);
-int (*libMPI_Barrier)(MPI_Comm);
+extern int (*libMPI_Initialized)(int*);
+extern int (*libMPI_Barrier)(MPI_Comm);
 
 /* fortran bindings */
 void (*libmpi_init_)(int* e);
@@ -147,12 +147,12 @@ int MPI_Init(int* argc, char*** argv) {
   return ret;
 }
 
-int (*libMPI_Send)(CONST void* buf, int count, MPI_Datatype datatype, int dest,
+extern int (*libMPI_Send)(CONST void* buf, int count, MPI_Datatype datatype, int dest,
 		     int tag, MPI_Comm comm);
-int (*libMPI_Recv)(void* buf, int count, MPI_Datatype datatype, int source,
+extern int (*libMPI_Recv)(void* buf, int count, MPI_Datatype datatype, int source,
                    int tag, MPI_Comm comm, MPI_Status* status);
-int (*libMPI_Barrier)(MPI_Comm);
-int (*libMPI_Reduce)(CONST void*, void*, int, MPI_Datatype, MPI_Op, int,
+extern int (*libMPI_Barrier)(MPI_Comm);
+extern int (*libMPI_Reduce)(CONST void*, void*, int, MPI_Datatype, MPI_Op, int,
                      MPI_Comm);
 
 static int _EZT_MPI_Recv(void* buffer, size_t size, int src, int tag) {
--- /dev/null
+++ b/src/eztrace-lib/eztrace_mpi_core_empty.c
@@ -0,0 +1 @@
+/* */
