CMake не может найти запрошенные библиотеки Boost - PullRequest
0 голосов
/ 02 июля 2018

Теперь, когда я в течение нескольких часов просматривал решения других людей и не смог найти совершенно правильного решения своей проблемы, я хотел бы донести до вас мою конкретную проблему. :)

Я пытаюсь собрать vsomeip с помощью CMake. Для этого я ранее построил boost 1.55, однако в CMake я получаю следующие ошибки:

The C compiler identification is MSVC 19.0.24215.1
The CXX compiler identification is MSVC 19.0.24215.1
Check for working C compiler: C:/Program Files (x86)/Microsoft Visua Studio 14.0/VC/bin/cl.exe
Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe -- works
Detecting C compiler ABI info
Detecting C compiler ABI info - done
Detecting C compile features
Detecting C compile features - done
Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe
Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe -- works
Detecting CXX compiler ABI info
Detecting CXX compiler ABI info - done
Detecting CXX compile features
Detecting CXX compile features - done
Setting build type to 'RelWithDebInfo' as none was specified.
Looking for pthread.h
Looking for pthread.h - not found
Found Threads: TRUE  
CMake Error at C:/Program Files/CMake/share/cmake-3.12/Modules/FindBoost.cmake:2025 (message):
Unable to find the requested Boost libraries.

  Boost version: 1.55.0

  Boost include path: C:/Program Files/boost/boost_1_55_0

  Could not find the following static Boost libraries:

      boost_system
      boost_thread
      boost_log

  Some (but not all) of the required Boost libraries were found.  You may
  need to install these additional Boost libraries.  Alternatively, set
  BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT
  to the location of Boost.
  Call Stack (most recent call first):
  CMakeLists.txt:99 (find_package)


Boost was not found!
Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) 
Systemd was not found, watchdog disabled!
using MSVC Compiler
Predefined unicast address: 127.0.0.1
Predefined diagnosis address: 0x00
Predefined routing application: vsomeipd
Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 
CMake Warning at CMakeLists.txt:335 (message):
Doxygen is not installed.  Documentation can not be built.


CMake Warning at CMakeLists.txt:374 (message):
  asciidoc is not installed.  Readme can not be built.


GTEST_ROOT is not defined. For building the tests the variable
             GTEST_ROOT has to be defined. Tests can not be built.
Configuring incomplete, errors occurred!
See also "D:/Desktop/BACHELORARBEIT/vsomeip/build/CMakeFiles    /CMakeOutput.log".
See also "D:/Desktop/BACHELORARBEIT/vsomeip/build/CMakeFiles/CMakeError.log".

Не удается найти статические библиотеки Boost. Теперь я попытался поиграть с CMakeList.txt, и вот его часть, которая должна обрабатывать ссылки:

# Boost
set(BOOST_INCLUDE_DIR C:/Program Files/Boost/boost_1_55_0)
set(BOOST_LIBRARYDIR C:/Program Files/Boost/boost_1_55_0/stage/libs)

set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
find_package( Boost 1.55 COMPONENTS system thread log REQUIRED )
include_directories( ${Boost_INCLUDE_DIR} )

    if(Boost_FOUND)
      if(Boost_LIBRARY_DIR)
        MESSAGE( STATUS "Boost_LIBRARY_DIR not empty using it: ${Boost_LIBRARY_DIR}" )
  else()
    if(BOOST_LIBRARYDIR)
      MESSAGE( STATUS "Boost_LIBRARY_DIR empty but BOOST_LIBRARYDIR is set setting Boost_LIBRARY_DIR to: ${BOOST_LIBRARYDIR}" )
      set(Boost_LIBRARY_DIR ${BOOST_LIBRARYDIR})
    endif()
  endif()
else()
  MESSAGE( STATUS "Boost was not found!")
endif()

Я также пытался использовать более новую версию Boost (1.67) с теми же результатами. Любая помощь будет оценена по достоинству!

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Как предложил @ Цыварев, я использовал set (Boost_DEBUG ON), чтобы отследить точные местоположения и файлы, которые искал CMake, и обнаружил несколько проблем:

1.) Установка пути к « C: / Program Files / Boost / boost_1_55_0 » вызывает проблемы, из-за пробела в пути

2.) Поиск библиотек, охватывающих несколько форматов, таких как:
boost_thread-vc141-mt-gd-x32-1_55.lib .
Однако, когда я создал boost с неверными параметрами, мои библиотеки были построены так:
libboost_thread-vc-mt-1_55.lib ,
, который имеет неправильный формат.

3.) К сожалению, добавление других опций при создании надстройки, например:
b2 toolset = msvc-14.1 address-model = 32 --build-type = complete
вызвал другие ошибки. Также сборка boost_1_67_0 у меня вообще сработала.

Мое решение проблемы состояло в том, чтобы просто взять одну из сторонних загрузок (https://dl.bintray.com/boostorg/release/1.67.0/binaries/). Таким образом, все библиотеки были построены правильно, и у меня не было проблем с ссылками на них.

0 голосов
/ 02 июля 2018

Проверьте, находятся ли ваши скомпилированные библиотеки в следующем каталоге:

C:/Program Files/Boost/boost_1_55_0/stage/libs

Если нет, укажите путь к папке с вашей папкой lib:

set(BOOST_LIBRARYDIR path_to_lib_directory)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...