[CMake] Linking with custom install of MPI

Christophe Picard christophe.picard at gmail.com
Fri Mar 2 09:04:09 EST 2012


Hello,

I have a slight problem linking against a local installation of mpi using cmake. It doesn't work in the way I was expected. It seems that FindMPI is able to locate the library but strip the linker of the informations concerning the directory containing the actual libraries.

Any help will be greatly appreciated.
You will find all the informations concerning the problem below.

Thank you in advance.

Best regards,

Christophe

Here is the CMakeLists.txt
cmake_minimum_required (VERSION 2.8.7)

# guard against in-source builds

if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
  message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt. ")
endif()

FIND_PACKAGE(MPI)
IF ( MPI_FOUND )
  SET(CMAKE_REQUIRED_INCLUDES "${MPI_INCLUDE_PATH};${CMAKE_REQUIRED_INCLUDES}")
  INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
ENDIF()
add_executable(test_mpi test_mpi.cpp)
message(STATUS "My exec libs ${LINK_LIBRARIES}")
target_link_libraries(test_mpi ${MPI_LIBRARIES})


Then the output of the generation
picard at odysse:build$ cmake  ../Sources/
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /opt/GNU-Compilers/install/4.6.2/bin/gcc
-- Check for working C compiler: /opt/GNU-Compilers/install/4.6.2/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /opt/GNU-Compilers/install/4.6.2/bin/c++
-- Check for working CXX compiler: /opt/GNU-Compilers/install/4.6.2/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Found MPI_C: /opt/MPI/install-gnu/openmpi-1.5.4-gnu-4.6.2/lib/libmpi.so;/usr/lib/libdl.so;/usr/lib/libnsl.so;/usr/lib/libutil.so;/usr/lib/libm.so;/usr/lib/libdl.so 
-- Found MPI_CXX: /opt/MPI/install-gnu/openmpi-1.5.4-gnu-4.6.2/lib/libmpi_cxx.so;/opt/MPI/install-gnu/openmpi-1.5.4-gnu-4.6.2/lib/libmpi.so;/usr/lib/libdl.so;/usr/lib/libnsl.so;/usr/lib/libutil.so;/usr/lib/libm.so;/usr/lib/libdl.so 
-- My exec libs 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/picard/build-feel
picard at odysee:buildl$ make -j 12Scanning dependencies of target test_mpi
[100%] Building CXX object CMakeFiles/test_mpi.dir/test_mpi.cpp.o
Linking CXX executable test_mpi
[100%] Built target test_mpi

And the linking informations for the built object
picard at odysee:build$ ldd test_mpi 
	linux-vdso.so.1 =>  (0x00007fff2edff000)
	libmpi_cxx.so.0 => /usr/lib/libmpi_cxx.so.0 (0x00007fa2f3246000)
	libmpi.so.0 => /usr/lib/libmpi.so.0 (0x00007fa2f2f95000)
	libdl.so.2 => /lib/libdl.so.2 (0x00007fa2f2d91000)
	libnsl.so.1 => /lib/libnsl.so.1 (0x00007fa2f2b79000)
	libutil.so.1 => /lib/libutil.so.1 (0x00007fa2f2976000)
	libm.so.6 => /lib/libm.so.6 (0x00007fa2f26f3000)
	libstdc++.so.6 => /opt/GNU-Compilers/install/4.6.2/lib64/libstdc++.so.6 (0x00007fa2f23ef000)
	libgcc_s.so.1 => /opt/GNU-Compilers/install/4.6.2/lib64/libgcc_s.so.1 (0x00007fa2f21da000)
	libc.so.6 => /lib/libc.so.6 (0x00007fa2f1e77000)
	libpthread.so.0 => /lib/libpthread.so.0 (0x00007fa2f1c5b000)
	libopen-rte.so.0 => /usr/lib/libopen-rte.so.0 (0x00007fa2f1a0f000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fa2f3476000)
	libopen-pal.so.0 => /usr/lib/libopen-pal.so.0 (0x00007fa2f17b9000)

And the generated link.txt
/opt/GNU-Compilers/install/4.6.2/bin/c++       CMakeFiles/test_mpi.dir/test_mpi.cpp.o  -o test_mpi -rdynamic -lmpi_cxx -lmpi -ldl -lnsl -lutil -lm -ldl -lnsl -lutil -lm 


More information about the CMake mailing list