天天看點

cmake Could NOT find Boost (missing: xxx 的問題解決cmake Could NOT find Boost (missing: xxx的問題解決

cmake Could NOT find Boost (missing: xxx的問題解決

在window上編譯solidity的時候,先進行sln工程的生成,根據官方文檔執行cmake即可:

cmake -G "Visual Studio 16 2019" ..
           

或者在沒有BOOST_ROOT環境變量的情況下額外指定boost路徑。我是有BOOST_ROOT環境變量的,是以未指定,但是題目中的問題與此無關。

直接執行上面指令報錯了。。。:

CMake Error at C:/Program Files/CMake/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:164 (message):
  Could NOT find Boost (missing: filesystem unit_test_framework
  program_options system) (found suitable version "1.70.0", minimum required
  is "1.65.0")
Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:445 (_FPHSA_FAILURE_MESSAGE)
  C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:2145 (find_package_handle_standard_args)
  cmake/EthDependencies.cmake:34 (find_package)
  CMakeLists.txt:42 (include)
           

從報錯資訊中可以看到cmake其實已經找到boost了,版本為1.70.0,這是正确的。但是為什麼找不到那幾個庫呢?

我上網查了加上【BOOST_LIBRARYDIR】選項,可以指定庫的路徑,但是不知道具體指定到那個層級,我的實際存儲在【boost_1_70_0\stage64\lib】下,但是我後來在【BOOST_LIBRARYDIR】中隻指定到了stage64。結果還是報一樣的錯誤,其實這時候我沒有意識到是路徑還需要再深一層,我以為這個選項不管用。。。

也正是因為這個,讓我遇到了一個更厲害的選項:【-DBoost_DEBUG=ON】這是用來在使用cmake查找boost的時候列印查找過程資訊的,加了這個選項後:

cmake -G "Visual Studio 16 2019" .. -DBoost_DEBUG=ON
           

整個過程清晰明了了,會輸出以下資訊(略長,就是cmake能擷取到的目前環境中boost的基本資訊,及一些查找路徑)

-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.19043.
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1466 ] _boost_TEST_VERSIONS = "1.72.0;1.72;1.71.0;1.71;1.70.0;1.70;1.69.0;1.69;1.68.0;1.68;1.67.0;1.67;1.66.0;1.66;1.65.1;1.65.0;1.65"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1467 ] Boost_USE_MULTITHREADED = "ON"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1468 ] Boost_USE_STATIC_LIBS = "ON"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1469 ] Boost_USE_STATIC_RUNTIME = "ON"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1470 ] Boost_ADDITIONAL_VERSIONS = <unset>
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1471 ] Boost_NO_SYSTEM_PATHS = <unset>
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1503 ] BOOST_ROOT = <unset>
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1504 ] ENV{BOOST_ROOT} = "D:\lib\boost_1_70_0"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1505 ] BOOST_INCLUDEDIR = <unset>
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1506 ] ENV{BOOST_INCLUDEDIR} = <unset>
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1507 ] BOOST_LIBRARYDIR = <unset>
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1508 ] ENV{BOOST_LIBRARYDIR} = <unset>
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1596 ] location of version.hpp: D:/lib/boost_1_70_0/boost/version.hpp
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1636 ] Boost_VERSION = "107000"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1637 ] Boost_VERSION_STRING = "1.70.0"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1638 ] Boost_VERSION_MACRO = "107000"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1639 ] Boost_VERSION_MAJOR = "1"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1640 ] Boost_VERSION_MINOR = "70"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1641 ] Boost_VERSION_PATCH = "0"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1642 ] Boost_VERSION_COUNT = "3"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1659 ] Boost_LIB_PREFIX = "lib"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1660 ] Boost_NAMESPACE = "boost"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:793 ] _boost_COMPILER = "-vc142;-vc141;-vc140" (guessed)
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1696 ] _boost_MULTITHREADED = "-mt"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1773 ] _boost_ARCHITECTURE_TAG = "-x64" (detected)
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1777 ] _boost_RELEASE_ABI_TAG = "-s"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1778 ] _boost_DEBUG_ABI_TAG = "-sgd"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1838 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = "D:/lib/boost_1_70_0/lib;D:/lib/boost_1_70_0/stage/lib;D:/lib/boost_1_70_0/lib64-msvc-14.2;D:/lib/boost_1_70_0/lib64-msvc-14.1;D:/lib/boost_1_70_0/lib64-msvc-14.0;D:/lib/boost_1_70_0/lib;D:/lib/boost_1_70_0/../lib;D:/lib/boost_1_70_0/stage/lib;D:/lib/boost_1_70_0/../lib64-msvc-14.2;D:/lib/boost_1_70_0/../lib64-msvc-14.1;D:/lib/boost_1_70_0/../lib64-msvc-14.0;D:/lib/boost_1_70_0/lib64-msvc-14.2;D:/lib/boost_1_70_0/lib64-msvc-14.1;D:/lib/boost_1_70_0/lib64-msvc-14.0;C:/local/boost_1_72_0/lib64-msvc-14.2;C:/local/boost_1_72_0/lib64-msvc-14.1;C:/local/boost_1_72_0/lib64-msvc-14.0;C:/local/boost_1_72/lib64-msvc-14.2;C:/local/boost_1_72/lib64-msvc-14.1;C:/local/boost_1_72/lib64-msvc-14.0;C:/local/boost_1_71_0/lib64-msvc-14.2;C:/local/boost_1_71_0/lib64-msvc-14.1;C:/local/boost_1_71_0/lib64-msvc-14.0;C:/local/boost_1_71/lib64-msvc-14.2;C:/local/boost_1_71/lib64-msvc-14.1;C:/local/boost_1_71/lib64-msvc-14.0;C:/local/boost_1_70_0/lib64-msvc-14.2;C:/local/boost_1_70_0/lib64-msvc-14.1;C:/local/boost_1_70_0/lib64-msvc-14.0;C:/local/boost_1_70/lib64-msvc-14.2;C:/local/boost_1_70/lib64-msvc-14.1;C:/local/boost_1_70/lib64-msvc-14.0;C:/local/boost_1_69_0/lib64-msvc-14.2;C:/local/boost_1_69_0/lib64-msvc-14.1;C:/local/boost_1_69_0/lib64-msvc-14.0;C:/local/boost_1_69/lib64-msvc-14.2;C:/local/boost_1_69/lib64-msvc-14.1;C:/local/boost_1_69/lib64-msvc-14.0;C:/local/boost_1_68_0/lib64-msvc-14.2;C:/local/boost_1_68_0/lib64-msvc-14.1;C:/local/boost_1_68_0/lib64-msvc-14.0;C:/local/boost_1_68/lib64-msvc-14.2;C:/local/boost_1_68/lib64-msvc-14.1;C:/local/boost_1_68/lib64-msvc-14.0;C:/local/boost_1_67_0/lib64-msvc-14.2;C:/local/boost_1_67_0/lib64-msvc-14.1;C:/local/boost_1_67_0/lib64-msvc-14.0;C:/local/boost_1_67/lib64-msvc-14.2;C:/local/boost_1_67/lib64-msvc-14.1;C:/local/boost_1_67/lib64-msvc-14.0;C:/local/boost_1_66_0/lib64-msvc-14.2;C:/local/boost_1_66_0/lib64-msvc-14.1;C:/local/boost_1_66_0/lib64-msvc-14.0;C:/local/boost_1_66/lib64-msvc-14.2;C:/local/boost_1_66/lib64-msvc-14.1;C:/local/boost_1_66/lib64-msvc-14.0;C:/local/boost_1_65_1/lib64-msvc-14.2;C:/local/boost_1_65_1/lib64-msvc-14.1;C:/local/boost_1_65_1/lib64-msvc-14.0;C:/local/boost_1_65_0/lib64-msvc-14.2;C:/local/boost_1_65_0/lib64-msvc-14.1;C:/local/boost_1_65_0/lib64-msvc-14.0;C:/local/boost_1_65/lib64-msvc-14.2;C:/local/boost_1_65/lib64-msvc-14.1;C:/local/boost_1_65/lib64-msvc-14.0;C:/boost/lib64-msvc-14.2;C:/boost/lib64-msvc-14.1;C:/boost/lib64-msvc-14.0;PATHS;C:/boost/lib;C:/boost;/sw/local/lib"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:1839 ] _boost_LIBRARY_SEARCH_DIRS_DEBUG = "D:/lib/boost_1_70_0/lib;D:/lib/boost_1_70_0/stage/lib;D:/lib/boost_1_70_0/lib64-msvc-14.2;D:/lib/boost_1_70_0/lib64-msvc-14.1;D:/lib/boost_1_70_0/lib64-msvc-14.0;D:/lib/boost_1_70_0/lib;D:/lib/boost_1_70_0/../lib;D:/lib/boost_1_70_0/stage/lib;D:/lib/boost_1_70_0/../lib64-msvc-14.2;D:/lib/boost_1_70_0/../lib64-msvc-14.1;D:/lib/boost_1_70_0/../lib64-msvc-14.0;D:/lib/boost_1_70_0/lib64-msvc-14.2;D:/lib/boost_1_70_0/lib64-msvc-14.1;D:/lib/boost_1_70_0/lib64-msvc-14.0;C:/local/boost_1_72_0/lib64-msvc-14.2;C:/local/boost_1_72_0/lib64-msvc-14.1;C:/local/boost_1_72_0/lib64-msvc-14.0;C:/local/boost_1_72/lib64-msvc-14.2;C:/local/boost_1_72/lib64-msvc-14.1;C:/local/boost_1_72/lib64-msvc-14.0;C:/local/boost_1_71_0/lib64-msvc-14.2;C:/local/boost_1_71_0/lib64-msvc-14.1;C:/local/boost_1_71_0/lib64-msvc-14.0;C:/local/boost_1_71/lib64-msvc-14.2;C:/local/boost_1_71/lib64-msvc-14.1;C:/local/boost_1_71/lib64-msvc-14.0;C:/local/boost_1_70_0/lib64-msvc-14.2;C:/local/boost_1_70_0/lib64-msvc-14.1;C:/local/boost_1_70_0/lib64-msvc-14.0;C:/local/boost_1_70/lib64-msvc-14.2;C:/local/boost_1_70/lib64-msvc-14.1;C:/local/boost_1_70/lib64-msvc-14.0;C:/local/boost_1_69_0/lib64-msvc-14.2;C:/local/boost_1_69_0/lib64-msvc-14.1;C:/local/boost_1_69_0/lib64-msvc-14.0;C:/local/boost_1_69/lib64-msvc-14.2;C:/local/boost_1_69/lib64-msvc-14.1;C:/local/boost_1_69/lib64-msvc-14.0;C:/local/boost_1_68_0/lib64-msvc-14.2;C:/local/boost_1_68_0/lib64-msvc-14.1;C:/local/boost_1_68_0/lib64-msvc-14.0;C:/local/boost_1_68/lib64-msvc-14.2;C:/local/boost_1_68/lib64-msvc-14.1;C:/local/boost_1_68/lib64-msvc-14.0;C:/local/boost_1_67_0/lib64-msvc-14.2;C:/local/boost_1_67_0/lib64-msvc-14.1;C:/local/boost_1_67_0/lib64-msvc-14.0;C:/local/boost_1_67/lib64-msvc-14.2;C:/local/boost_1_67/lib64-msvc-14.1;C:/local/boost_1_67/lib64-msvc-14.0;C:/local/boost_1_66_0/lib64-msvc-14.2;C:/local/boost_1_66_0/lib64-msvc-14.1;C:/local/boost_1_66_0/lib64-msvc-14.0;C:/local/boost_1_66/lib64-msvc-14.2;C:/local/boost_1_66/lib64-msvc-14.1;C:/local/boost_1_66/lib64-msvc-14.0;C:/local/boost_1_65_1/lib64-msvc-14.2;C:/local/boost_1_65_1/lib64-msvc-14.1;C:/local/boost_1_65_1/lib64-msvc-14.0;C:/local/boost_1_65_0/lib64-msvc-14.2;C:/local/boost_1_65_0/lib64-msvc-14.1;C:/local/boost_1_65_0/lib64-msvc-14.0;C:/local/boost_1_65/lib64-msvc-14.2;C:/local/boost_1_65/lib64-msvc-14.1;C:/local/boost_1_65/lib64-msvc-14.0;C:/boost/lib64-msvc-14.2;C:/boost/lib64-msvc-14.1;C:/boost/lib64-msvc-14.0;PATHS;C:/boost/lib;C:/boost;/sw/local/lib"
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:2024 ] Searching for FILESYSTEM_LIBRARY_RELEASE: libboost_filesystem-vc142-mt-s-x64-1_70;libboost_filesystem-vc142-mt-s-x64;libboost_filesystem-vc142-mt-s;libboost_filesystem-vc141-mt-s-x64-1_70;libboost_filesystem-vc141-mt-s-x64;libboost_filesystem-vc141-mt-s;libboost_filesystem-vc140-mt-s-x64-1_70;libboost_filesystem-vc140-mt-s-x64;libboost_filesystem-vc140-mt-s;libboost_filesystem-mt-s-x64-1_70;libboost_filesystem-mt-s-x64;libboost_filesystem-mt-s;libboost_filesystem-mt;libboost_filesystem
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:2079 ] Searching for FILESYSTEM_LIBRARY_DEBUG: libboost_filesystem-vc142-mt-sgd-x64-1_70;libboost_filesystem-vc142-mt-sgd-x64;libboost_filesystem-vc142-mt-sgd;libboost_filesystem-vc141-mt-sgd-x64-1_70;libboost_filesystem-vc141-mt-sgd-x64;libboost_filesystem-vc141-mt-sgd;libboost_filesystem-vc140-mt-sgd-x64-1_70;libboost_filesystem-vc140-mt-sgd-x64;libboost_filesystem-vc140-mt-sgd;libboost_filesystem-mt-sgd-x64-1_70;libboost_filesystem-mt-sgd-x64;libboost_filesystem-mt-sgd;libboost_filesystem-mt;libboost_filesystem
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:2024 ] Searching for UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE: libboost_unit_test_framework-vc142-mt-s-x64-1_70;libboost_unit_test_framework-vc142-mt-s-x64;libboost_unit_test_framework-vc142-mt-s;libboost_unit_test_framework-vc141-mt-s-x64-1_70;libboost_unit_test_framework-vc141-mt-s-x64;libboost_unit_test_framework-vc141-mt-s;libboost_unit_test_framework-vc140-mt-s-x64-1_70;libboost_unit_test_framework-vc140-mt-s-x64;libboost_unit_test_framework-vc140-mt-s;libboost_unit_test_framework-mt-s-x64-1_70;libboost_unit_test_framework-mt-s-x64;libboost_unit_test_framework-mt-s;libboost_unit_test_framework-mt;libboost_unit_test_framework
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:2079 ] Searching for UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG: libboost_unit_test_framework-vc142-mt-sgd-x64-1_70;libboost_unit_test_framework-vc142-mt-sgd-x64;libboost_unit_test_framework-vc142-mt-sgd;libboost_unit_test_framework-vc141-mt-sgd-x64-1_70;libboost_unit_test_framework-vc141-mt-sgd-x64;libboost_unit_test_framework-vc141-mt-sgd;libboost_unit_test_framework-vc140-mt-sgd-x64-1_70;libboost_unit_test_framework-vc140-mt-sgd-x64;libboost_unit_test_framework-vc140-mt-sgd;libboost_unit_test_framework-mt-sgd-x64-1_70;libboost_unit_test_framework-mt-sgd-x64;libboost_unit_test_framework-mt-sgd;libboost_unit_test_framework-mt;libboost_unit_test_framework
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:2024 ] Searching for PROGRAM_OPTIONS_LIBRARY_RELEASE: libboost_program_options-vc142-mt-s-x64-1_70;libboost_program_options-vc142-mt-s-x64;libboost_program_options-vc142-mt-s;libboost_program_options-vc141-mt-s-x64-1_70;libboost_program_options-vc141-mt-s-x64;libboost_program_options-vc141-mt-s;libboost_program_options-vc140-mt-s-x64-1_70;libboost_program_options-vc140-mt-s-x64;libboost_program_options-vc140-mt-s;libboost_program_options-mt-s-x64-1_70;libboost_program_options-mt-s-x64;libboost_program_options-mt-s;libboost_program_options-mt;libboost_program_options
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:2079 ] Searching for PROGRAM_OPTIONS_LIBRARY_DEBUG: libboost_program_options-vc142-mt-sgd-x64-1_70;libboost_program_options-vc142-mt-sgd-x64;libboost_program_options-vc142-mt-sgd;libboost_program_options-vc141-mt-sgd-x64-1_70;libboost_program_options-vc141-mt-sgd-x64;libboost_program_options-vc141-mt-sgd;libboost_program_options-vc140-mt-sgd-x64-1_70;libboost_program_options-vc140-mt-sgd-x64;libboost_program_options-vc140-mt-sgd;libboost_program_options-mt-sgd-x64-1_70;libboost_program_options-mt-sgd-x64;libboost_program_options-mt-sgd;libboost_program_options-mt;libboost_program_options
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:2024 ] Searching for SYSTEM_LIBRARY_RELEASE: libboost_system-vc142-mt-s-x64-1_70;libboost_system-vc142-mt-s-x64;libboost_system-vc142-mt-s;libboost_system-vc141-mt-s-x64-1_70;libboost_system-vc141-mt-s-x64;libboost_system-vc141-mt-s;libboost_system-vc140-mt-s-x64-1_70;libboost_system-vc140-mt-s-x64;libboost_system-vc140-mt-s;libboost_system-mt-s-x64-1_70;libboost_system-mt-s-x64;libboost_system-mt-s;libboost_system-mt;libboost_system
-- [ C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:2079 ] Searching for SYSTEM_LIBRARY_DEBUG: libboost_system-vc142-mt-sgd-x64-1_70;libboost_system-vc142-mt-sgd-x64;libboost_system-vc142-mt-sgd;libboost_system-vc141-mt-sgd-x64-1_70;libboost_system-vc141-mt-sgd-x64;libboost_system-vc141-mt-sgd;libboost_system-vc140-mt-sgd-x64-1_70;libboost_system-vc140-mt-sgd-x64;libboost_system-vc140-mt-sgd;libboost_system-mt-sgd-x64-1_70;libboost_system-mt-sgd-x64;libboost_system-mt-sgd;libboost_system-mt;libboost_system
CMake Error at C:/Program Files/CMake/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:164 (message):
  Could NOT find Boost (missing: filesystem unit_test_framework
  program_options system) (found suitable version "1.70.0", minimum required
  is "1.65.0")
Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:445 (_FPHSA_FAILURE_MESSAGE)
  C:/Program Files/CMake/share/cmake-3.17/Modules/FindBoost.cmake:2145 (find_package_handle_standard_args)
  cmake/EthDependencies.cmake:34 (find_package)
  CMakeLists.txt:42 (include)
           

從上面的輸出中可以看到【BOOST_LIBRARYDIR】變量在cmake裡顯示未設定,導緻後面cmake去找【_boost_LIBRARY_SEARCH_DIRS_RELEASE】即庫的尋找目錄時,設定了一些預設的路徑,這些路徑跟我電腦上的不一樣,最終導緻在找【FILESYSTEM_LIBRARY_RELEASE】等庫的時候找不到,是以到這裡我知道了,還是庫的路徑不對,庫的路徑要直接到庫所在檔案夾:【boost_1_70_0\stage64\lib】,是以直接添加【-DBOOST_LIBRARYDIR=“path/to/boost/lib”】的選項,指向實際有那些庫的路徑。然後就解決問題了!

後面再使用cmake找boost遇到什麼問題都可以添加【-DBoost_DEBUG=ON】來分析具體錯誤原因,非常實用!

繼續閱讀