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】来分析具体错误原因,非常实用!

<think>好的,我现在需要解决用户提出的关于Boost 1.74.0缺少filesystem、system等模块的问题。首先,我得先理清楚用户遇到的具体情况。根据用户提供的引用信息,问题可能出现在编译或链接阶段,系统无法找到所需的Boost库模块。 首先,用户提到引用[1]中提到了在CMake中查找Boost单元测试框架库时的搜索路径,这可能意味着CMake在配置项目时未能正确找到所需的Boost库。而引用[2]则涉及Boost的安装路径,用户可能没有正确安装这些模块,或者安装路径未被CMake识别。 接下来,我需要考虑可能导致这些模块缺失的常见原因。首先,用户是否正确安装了这些模块?Boost的某些库需要单独编译生成,尤其是像filesystem、system这样的模块,它们属于需要编译的库部分。如果用户仅安装了头文件库(header-only libraries),那么这些需要编译的模块就不会被包含进去。因此,用户可能需要重新安装Boost,并确保在安装过程中正确编译了这些模块。 然后,检查安装路径是否正确。根据引用[2],如果用户使用--prefix=/usr安装Boost,那么库文件应该位于/usr/lib/,头文件在/usr/include/boost。但有时候,特别是当使用不同版本的编译器或构建工具时,生成的库文件名可能包含特定的后缀,如编译器版本或线程选项,这可能导致CMake无法正确识别库文件。例如,用户提供的引用[1]中搜索的库名称包含-mgw8-mt-d-1_78这样的后缀,这可能对应于MinGW 8的版本、多线程调试模式以及Boost 1.78版本。如果用户安装的是Boost 1.74.0,版本号不匹配可能导致CMake找不到正确的库文件。 另外,用户可能没有正确设置环境变量或CMake变量来指向Boost的安装路径。即使Boost安装在系统目录,有时也需要显式指定BOOST_ROOT或Boost_DIR,特别是在多版本共存的情况下。此外,确保CMakeFindBoost模块能够识别用户安装的Boost版本。有时候,旧版本的CMake可能不支持较新的Boost版本,需要升级CMake。 接下来,可能的解决步骤包括: 1. 确认Boost是否正确安装了所需的模块。用户需要重新运行Boost的安装过程,确保在构建时指定了这些模块。 2. 检查Boost的安装路径是否被CMake正确识别。可能需要手动设置BOOST_ROOT或Boost_LIBRARY_DIR等变量。 3. 确保CMakeFindBoost模块能够找到正确版本的Boost。可能需要升级CMake或调整模块搜索路径。 4. 验证库文件名是否符合CMake的预期格式,必要时创建符号链接或调整CMake脚本以匹配实际文件名。 此外,用户可能在安装Boost时没有正确构建这些模块。例如,使用b2工具构建Boost时,需要指定--with-filesystem等选项来编译特定库。如果用户仅执行了默认构建,可能只编译了一部分库。 最后,总结解决方案的步骤,并考虑用户可能的操作环境(如Windows下使用MinGW或Linux系统),提供相应的命令示例和配置建议,确保用户能够逐步排查并解决问题。</think>### 解决 Boost 1.74.0 缺少特定模块的问题 #### 1. 确认模块是否已编译安装 Boost 的 `filesystem`、`system` 等模块需要单独编译为二进制库文件(非纯头文件库)。 **操作步骤**: - 进入 Boost 源码目录,执行以下命令重新编译并安装: ```bash ./bootstrap.sh --prefix=/usr --with-libraries=filesystem,system,thread,program_options,regex,unit_test_framework ./b2 install ``` 其中 `--with-libraries` 明确指定需要编译的模块[^2]。 #### 2. 检查安装路径与文件命名 - **路径验证**:安装后确认库文件是否在 `/usr/lib/` 下,头文件是否在 `/usr/include/boost` 中。 - **文件名匹配**:CMake 可能因库文件命名格式不匹配而搜索失败(例如 `boost_unit_test_framework-mgw8-mt-d-1_78` 中的编译器版本和 Boost 版本标识)。 **解决方法**: - 创建符号链接匹配 CMake 期望的名称: ```bash ln -s /usr/lib/libboost_unit_test_framework.so.1.74.0 /usr/lib/libboost_unit_test_framework-mt.so ``` - 或在 CMake 中显式指定库名: ```cmake find_package(Boost 1.74.0 COMPONENTS filesystem system ...) set(Boost_UNIT_TEST_FRAMEWORK_LIBRARY "boost_unit_test_framework-mt") ``` #### 3. 配置 CMake 环境变量 若 Boost 安装路径未被自动识别,需手动指定: ```cmake set(BOOST_ROOT "/usr") set(Boost_LIBRARY_DIR "/usr/lib") find_package(Boost 1.74.0 REQUIRED COMPONENTS filesystem system thread program_options regex unit_test_framework) ``` #### 4. 升级 CMake 版本 旧版本 CMake 可能不支持 Boost 1.74.0 的检测逻辑,建议升级到 CMake 3.14+。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值