C++ CMake找不到Boost库二进制文件(二进制文件的新命名约定)
我首先说,这不是环境变量的问题 当我使用仅限页眉的库时,所有功能都可以使用:C++ CMake找不到Boost库二进制文件(二进制文件的新命名约定),c++,boost,cmake,C++,Boost,Cmake,我首先说,这不是环境变量的问题 当我使用仅限页眉的库时,所有功能都可以使用: set(Boost_USE_STATIC_LIBS OFF) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) find_package(Boost REQUIRED) if(Boost_FOUND) include_directories(${Boost_INCLUDE_DIRS}) add_executable(Te
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost REQUIRED)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(TestCMake Program.cpp)
target_link_libraries(TestCMake ${Boost_LIBRARIES})
endif()
但是,当我试图通过将find_-package(Boost-REQUIRED)
更改为find_-package(Boost-REQUIRED-COMPONENTS-system)
来请求库时,我得到一个错误:
Unable to find the requested Boost libraries.
Boost version: 1.67.0
Boost include path: D:/boost/boost_1_67_0
Could not find the following Boost libraries:
boost_system
No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the
directory containing Boost libraries or BOOST_ROOT to the location of
Boost.
关于另一个问题,CMake希望Boost二进制文件以某种方式命名:
boost_thread-vc100-mt-1_51
boost_thread-vc100-mt
boost_thread-mt-1_51
boost_thread-mt
boost_thread
我有一个名为boost_system-vc141-mt-x32-1_67.lib的预编译二进制文件(从中获取)如何让CMake识别二进制文件中使用的命名约定?
对另一个问题的评论建议不要重命名这些文件。在较新版本的Boost(1.66及更高版本)中,二进制文件的命名约定已更改。现在,还有一个附加的x64
或x32
因此,只有在1.66 Boost发行版之后的CMake版本才有此修复,从3.11开始就是这样
因此,您有两个选择:
- 将您的CMake版本升级到3.11以上的版本
- 使用这些较新的cmake版本之一的
FindBoost.cmake
(它们通常是兼容的)
如果由于公司政策,您只能使用一个版本,则必须使用后一种解决方案。在较新版本的Boost(1.66及更高版本)中,二进制文件的命名约定已更改。现在,还有一个附加的x64
或x32
因此,只有在1.66 Boost发行版之后的CMake版本才有此修复,从3.11开始就是这样
因此,您有两个选择:
- 将您的CMake版本升级到3.11以上的版本
- 使用这些较新的cmake版本之一的
FindBoost.cmake
(它们通常是兼容的)
如果由于公司政策,您只能使用一个版本,则必须使用后一种解决方案。您使用的是哪个CMake版本?只有在3.11之后,CMake才支持新的Boost命名约定。您还可以在您的项目中使用更新的FindBoost,这也很有效。不需要重命名任何东西。哦,哇,我实际上使用的是3.10。我现在觉得很愚蠢,因为我已经在这上面浪费了2个多小时。你用的是哪个CMake版本?只有在3.11之后,CMake才支持新的Boost命名约定。您还可以在您的项目中使用更新的FindBoost,这也很有效。不需要重命名任何东西。哦,哇,我实际上使用的是3.10。我现在觉得自己很愚蠢,因为我已经在这上面浪费了2个多小时。3.12版就不行了<代码>[C:/Program Files/CMake/share/CMake-3.12/Modules/FindBoost.CMake:1809]搜索系统库调试:libboost\u SYSTEM-mgw73-mt-d-1\u 68;libu系统-mgw73-mt-d;libboost_系统-mt-d-1_68;libu系统-mt-d;libu系统-mt;libu系统;libboost_系统-mgw73-mt-s-d-1_68;libu系统-mgw73-mt-s-d;libboost_系统-mt-s-d-1_68;libboost_system-mt-s-d
在3.12中不起作用<代码>[C:/Program Files/CMake/share/CMake-3.12/Modules/FindBoost.CMake:1809]搜索系统库调试:libboost\u SYSTEM-mgw73-mt-d-1\u 68;libu系统-mgw73-mt-d;libboost_系统-mt-d-1_68;libu系统-mt-d;libu系统-mt;libu系统;libboost_系统-mgw73-mt-s-d-1_68;libu系统-mgw73-mt-s-d;libboost_系统-mt-s-d-1_68;libboost_system-mt-s-d