Re: [CMake] Correct Boost version found, linked against wrong one

2019-03-12 Thread Andreas Naumann

Hey Florian,


Am 12.03.19 um 13:53 schrieb Florian Lindner:

Hello,

I have a simple cmake file for a small project. That project uses boost and 
links again a shared lib that also uses boost:

find_library(precice precice PATHS $ENV{PRECICE_ROOT}/build 
$ENV{PRECICE_ROOT}/build/last)
find_package(Boost 1.60.0 REQUIRED COMPONENTS system program_options filesystem)

add_executable(preciceMap src/preciceMap.cpp src/common.cpp)
target_include_directories(preciceMap PRIVATE ${Boost_INCLUDE_DIRS})
target_link_libraries(preciceMap ${Boost_LIBRARIES})
target_link_libraries(preciceMap ${precice})

output is:


:~/software/aste/build> cmake ..
-- The C compiler identification is GNU 8.2.0
-- The CXX compiler identification is GNU 8.2.0
-- Cray Programming Environment 2.5.17 C
-- Check for working C compiler: /opt/cray/pe/craype/2.5.17/bin/cc
-- Check for working C compiler: /opt/cray/pe/craype/2.5.17/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Cray Programming Environment 2.5.17 CXX
-- Check for working CXX compiler: /opt/cray/pe/craype/2.5.17/bin/CC
-- Check for working CXX compiler: /opt/cray/pe/craype/2.5.17/bin/CC -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Build configuration: Debug
CMake Warning at /usr/share/cmake/Modules/FindBoost.cmake:725 (message):
   Imported targets not available for Boost version 106600
Call Stack (most recent call first):
   /usr/share/cmake/Modules/FindBoost.cmake:763 (_Boost_COMPONENT_DEPENDENCIES)
   /usr/share/cmake/Modules/FindBoost.cmake:1315 (_Boost_MISSING_DEPENDENCIES)
   CMakeLists.txt:21 (find_package)


CMake Warning at /usr/share/cmake/Modules/FindBoost.cmake:725 (message):
   Imported targets not available for Boost version 106600
Call Stack (most recent call first):
   /usr/share/cmake/Modules/FindBoost.cmake:763 (_Boost_COMPONENT_DEPENDENCIES)
   /usr/share/cmake/Modules/FindBoost.cmake:1315 (_Boost_MISSING_DEPENDENCIES)
   CMakeLists.txt:21 (find_package)


CMake Warning at /usr/share/cmake/Modules/FindBoost.cmake:725 (message):
   Imported targets not available for Boost version 106600
Call Stack (most recent call first):
   /usr/share/cmake/Modules/FindBoost.cmake:763 (_Boost_COMPONENT_DEPENDENCIES)
   /usr/share/cmake/Modules/FindBoost.cmake:1315 (_Boost_MISSING_DEPENDENCIES)
   CMakeLists.txt:21 (find_package)


-- Boost version: 1.66.0
-- Found the following Boost libraries:
--   system
--   program_options
--   filesystem
-- Found MPI_C: /opt/cray/pe/craype/2.5.17/bin/cc
-- Found MPI_CXX: /opt/cray/pe/craype/2.5.17/bin/CC
-- Configuring done
-- Generating done
-- Build files have been written to: 
/zhome/academic/HLRS/ipv/ipvflind/software/aste/build

:~/software/aste/build> make
Scanning dependencies of target preciceMap
[ 20%] Building CXX object CMakeFiles/preciceMap.dir/src/preciceMap.cpp.o
[ 40%] Building CXX object CMakeFiles/preciceMap.dir/src/common.cpp.o
[ 60%] Linking CXX executable preciceMap
/usr/bin/ld: warning: libboost_system.so.1.66.0, needed by 
/zhome/academic/HLRS/ipv/ipvflind/software/precice/build/last/libprecice.so, 
may conflict with libboost_system.so.1.54.0
/usr/bin/ld: warning: libboost_filesystem.so.1.66.0, needed by 
/zhome/academic/HLRS/ipv/ipvflind/software/precice/build/last/libprecice.so, 
may conflict with libboost_filesystem.so.1.54.0
/usr/bin/ld: warning: libboost_program_options.so.1.66.0, needed by 
/zhome/academic/HLRS/ipv/ipvflind/software/precice/build/last/libprecice.so, 
may conflict with libboost_program_options.so.1.54.0
/usr/bin/ld: CMakeFiles/preciceMap.dir/src/common.cpp.o: undefined reference to 
symbol '_ZN5boost15program_options3argB5cxx11E'
/opt/hlrs/tools/boost/1.66.0/lib/libboost_program_options.so.1.66.0: error 
adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/preciceMap.dir/build.make:124: recipe for target 'preciceMap' failed
make[2]: *** [preciceMap] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/preciceMap.dir/all' 
failed
make[1]: *** [CMakeFiles/preciceMap.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2



CMake finds boost 1.66 but why does it try to link against 1.54.0? $BOOST_ROOT 
is set and $LIBRARY_PATH, $LD_LIBRARY_PATH and $CPLUS_INCLUDE_PATH are also set 
appropriately.

:~/software/aste/build> ls $BOOST_ROOT/lib/*filesystem*
/opt/hlrs/tools/boost/1.66.0/lib/libboost_filesystem.a  
/opt/hlrs/tools/boost/1.66.0/lib/libboost_filesystem.so  
/opt/hlrs/tools/boost/1.66.0/lib/libboost_filesystem.so.1.66.0

:~/software/aste/build> ls /usr/lib64/*filesystem*
/usr/lib64/libboost_filesystem-mt.so  /usr/lib64/libboost_filesystem.so  
/usr/lib64/libboost_filesystem.so.1.54.0

Maybe it prefers the -mt variants? But how can I get it to link against the 
correct 

[CMake] Correct Boost version found, linked against wrong one

2019-03-12 Thread Florian Lindner
Hello,

I have a simple cmake file for a small project. That project uses boost and 
links again a shared lib that also uses boost:

find_library(precice precice PATHS $ENV{PRECICE_ROOT}/build 
$ENV{PRECICE_ROOT}/build/last)
find_package(Boost 1.60.0 REQUIRED COMPONENTS system program_options filesystem)

add_executable(preciceMap src/preciceMap.cpp src/common.cpp)
target_include_directories(preciceMap PRIVATE ${Boost_INCLUDE_DIRS})
target_link_libraries(preciceMap ${Boost_LIBRARIES})
target_link_libraries(preciceMap ${precice})

output is:


:~/software/aste/build> cmake ..
-- The C compiler identification is GNU 8.2.0
-- The CXX compiler identification is GNU 8.2.0
-- Cray Programming Environment 2.5.17 C
-- Check for working C compiler: /opt/cray/pe/craype/2.5.17/bin/cc
-- Check for working C compiler: /opt/cray/pe/craype/2.5.17/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Cray Programming Environment 2.5.17 CXX
-- Check for working CXX compiler: /opt/cray/pe/craype/2.5.17/bin/CC
-- Check for working CXX compiler: /opt/cray/pe/craype/2.5.17/bin/CC -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Build configuration: Debug
CMake Warning at /usr/share/cmake/Modules/FindBoost.cmake:725 (message):
  Imported targets not available for Boost version 106600
Call Stack (most recent call first):
  /usr/share/cmake/Modules/FindBoost.cmake:763 (_Boost_COMPONENT_DEPENDENCIES)
  /usr/share/cmake/Modules/FindBoost.cmake:1315 (_Boost_MISSING_DEPENDENCIES)
  CMakeLists.txt:21 (find_package)


CMake Warning at /usr/share/cmake/Modules/FindBoost.cmake:725 (message):
  Imported targets not available for Boost version 106600
Call Stack (most recent call first):
  /usr/share/cmake/Modules/FindBoost.cmake:763 (_Boost_COMPONENT_DEPENDENCIES)
  /usr/share/cmake/Modules/FindBoost.cmake:1315 (_Boost_MISSING_DEPENDENCIES)
  CMakeLists.txt:21 (find_package)


CMake Warning at /usr/share/cmake/Modules/FindBoost.cmake:725 (message):
  Imported targets not available for Boost version 106600
Call Stack (most recent call first):
  /usr/share/cmake/Modules/FindBoost.cmake:763 (_Boost_COMPONENT_DEPENDENCIES)
  /usr/share/cmake/Modules/FindBoost.cmake:1315 (_Boost_MISSING_DEPENDENCIES)
  CMakeLists.txt:21 (find_package)


-- Boost version: 1.66.0
-- Found the following Boost libraries:
--   system
--   program_options
--   filesystem
-- Found MPI_C: /opt/cray/pe/craype/2.5.17/bin/cc  
-- Found MPI_CXX: /opt/cray/pe/craype/2.5.17/bin/CC  
-- Configuring done
-- Generating done
-- Build files have been written to: 
/zhome/academic/HLRS/ipv/ipvflind/software/aste/build

:~/software/aste/build> make
Scanning dependencies of target preciceMap
[ 20%] Building CXX object CMakeFiles/preciceMap.dir/src/preciceMap.cpp.o
[ 40%] Building CXX object CMakeFiles/preciceMap.dir/src/common.cpp.o
[ 60%] Linking CXX executable preciceMap
/usr/bin/ld: warning: libboost_system.so.1.66.0, needed by 
/zhome/academic/HLRS/ipv/ipvflind/software/precice/build/last/libprecice.so, 
may conflict with libboost_system.so.1.54.0
/usr/bin/ld: warning: libboost_filesystem.so.1.66.0, needed by 
/zhome/academic/HLRS/ipv/ipvflind/software/precice/build/last/libprecice.so, 
may conflict with libboost_filesystem.so.1.54.0
/usr/bin/ld: warning: libboost_program_options.so.1.66.0, needed by 
/zhome/academic/HLRS/ipv/ipvflind/software/precice/build/last/libprecice.so, 
may conflict with libboost_program_options.so.1.54.0
/usr/bin/ld: CMakeFiles/preciceMap.dir/src/common.cpp.o: undefined reference to 
symbol '_ZN5boost15program_options3argB5cxx11E'
/opt/hlrs/tools/boost/1.66.0/lib/libboost_program_options.so.1.66.0: error 
adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/preciceMap.dir/build.make:124: recipe for target 'preciceMap' failed
make[2]: *** [preciceMap] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/preciceMap.dir/all' 
failed
make[1]: *** [CMakeFiles/preciceMap.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2



CMake finds boost 1.66 but why does it try to link against 1.54.0? $BOOST_ROOT 
is set and $LIBRARY_PATH, $LD_LIBRARY_PATH and $CPLUS_INCLUDE_PATH are also set 
appropriately.

:~/software/aste/build> ls $BOOST_ROOT/lib/*filesystem*
/opt/hlrs/tools/boost/1.66.0/lib/libboost_filesystem.a  
/opt/hlrs/tools/boost/1.66.0/lib/libboost_filesystem.so  
/opt/hlrs/tools/boost/1.66.0/lib/libboost_filesystem.so.1.66.0

:~/software/aste/build> ls /usr/lib64/*filesystem*
/usr/lib64/libboost_filesystem-mt.so  /usr/lib64/libboost_filesystem.so  
/usr/lib64/libboost_filesystem.so.1.54.0

Maybe it prefers the -mt variants? But how can I get it to link against the 
correct files, i.e., 1.66?

Or is the "DSO missing from command line" another