使用Boost的CMake找不到静态库

时间:2013-12-18 10:01:36

标签: c++ windows boost makefile cmake

我在使用CMake和Boost库时遇到了一些麻烦。我有以下错误:

CMake Error at C:/Program Files (x86)/CMake
2.8/share/cmake-2.8/Modules/FindBoost.cmake:1111 (message):   Unable to find the requested Boost libraries.

  Boost version: 1.55.0

  Boost include path: C:/local/boost_1_55_0

  Could not find the following static Boost libraries:

          boost_system
          boost_date_time
          boost_regex

  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. Call Stack (most recent call first):  
CMakeLists.txt:10 (find_package)


-- Configuring incomplete, errors occurred!

我在我的CMakeLists.txt中找到了我在网上找到的所有内容,但它不起作用,我不明白。 我正在使用Windows 8和Visual Studio 12,并且Boost安装在默认目录中。 (C:/本地/ boost_1_55_0)

这是我的CMakeLists.txt:

cmake_minimum_required(VERSION 2.6)

project (server)

set(BOOST_ROOT "c:\\local\\boost_1_55_0")

set (Boost_USE_STATIC_LIBS ON) set (Boost_MULTITHREADED ON) set
(Boost_USE_STATIC_RUNTIME OFF)

find_package(Boost 1.55 COMPONENTS system date_time regex REQUIRED)
add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})

set(SRCS main.cpp Server.cpp Client.cpp)

set(HEADERS Server.h Client.h)

include_directories(${Boost_INCLUDE_DIR})

add_executable(babel_server ${SRCS} ${HEADERS})

target_link_libraries(babel_server ${Boost_LIBRARIES})

任何人都可以帮助我吗?

由于

5 个答案:

答案 0 :(得分:8)

我猜你的编译库不在你的BOOST_ROOT / lib /文件夹中。在这种情况下,您需要设置lib文件夹目录路径。

set(BOOST_LIBRARYDIR ${BOOST_ROOT}/stage/lib/)

set(BOOST_LIBRARYDIR path/to/your/lib/folder)

答案 1 :(得分:7)

我有同样的问题

使用命令

解决
bjam install --prefix="<your boost install folder>" --with-system --with-date_time --with-random link=static runtime-link=shared threading=multi

答案 2 :(得分:0)

我在使用vs2017的Windows 10上,我只是添加:

    "set(Boost_LIB_PREFIX "lib")
    set(_boost_RELEASE_ABI_TAG ".lib")"

之前

    "unset(_boost_RELEASE_NAMES)" 

FindBoost.cmake文件中,解决了我的问题!

答案 3 :(得分:0)

将这两行放在Findboost.cmake中可以解决此问题。 我正在使用windows 10visual studio 17上。

    set(Boost_LIB_PREFIX "lib")

    set(_boost_RELEASE_ABI_TAG ".lib")

如果我是正确的话,FindBoost正在搜索不带.lib的文件,但是库的末尾带有.lib。

答案 4 :(得分:0)

确保为发生器选择了正确的平台。
例如,如果您的Boost是64位,并且CMake的生成器设置为Win32(Windows上的默认设置),它将无法找到这些库。每当您初次尝试配置项目时都可以设置该值,并且可以通过删除缓存来重置它。