【问题标题】:cmake cannot find (=link) boost libraries when using MAKE_TOOLCHAIN_FILE使用 MAKE_TOOLCHAIN_FILE 时,cmake 找不到(=链接)boost 库
【发布时间】:2014-07-02 13:08:14
【问题描述】:

我正在尝试交叉编译使用 boost 的 C++ 应用程序。因此我自己编译了boost。对于 CMake,我创建了一个“工具链文件”,我将其指定给 CMake,如下所示:

cmake . -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_TOOLCHAIN_FILE=arm-linux-gnueabi-g++.cmake

文件 arm-linux-gnueabi-g++.cmake 包含我编译的 boost 版本的路径:

# Boost ARM
SET(BOOST_INCLUDEDIR /home/ubuntu/development/boost_1_55_0)
SET(BOOST_LIBRARYDIR /home/ubuntu/development/boost_1_55_0/stage/lib)

我的 CMakeLists.txt 包含以下内容:

SET(Boost_USE_STATIC_LIBS ON)
FIND_PACKAGE(Boost COMPONENTS chrono date_time filesystem locale log regex system thread REQUIRED)
...
TARGET_LINK_LIBRARIES(${ApplicationName} ${Boost_LIBRARIES} )

结果 CMake 告诉我:

Boost version: 1.55.0
Found the following Boost libraries:
    chrono
    date_time
    ...
    thread

所以编译工作正常,但在链接时出现以下链接器错误:

/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lboost_chrono
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -ldate_time
...

我不明白,BOOST_LIBRARYDIR 肯定包含 libboost_chrono.a(通常是所有静态库)。我的 CMakeLists.txt 中的以下命令甚至显示找到了 *.a 文件。

message(STATUS ${Boost_LIBRARIES})

怎么了?

【问题讨论】:

    标签: c++ boost cmake


    【解决方案1】:

    我不明白为什么,但是如下:

    SET(BOOST_INCLUDEDIR /home/ubuntu/development/boost_1_55_0)
    SET(BOOST_LIBRARYDIR /home/ubuntu/development/boost_1_55_0/stage/lib)
    

    需要更改/减少到

    SET(Boost_INCLUDE_DIR /home/ubuntu/development/boost_1_55_0)
    

    没有必要指定 BOOST_ROOT 或 BOOST_LIBRARYDIR。此外 BOOST_INCLUDE_DIR 已更改为 Boost_INCLUDE_DIR。如果设置了这个变量,CMake 在使用 FIND_PACKAGE(Boost ...) 时会神奇地自行查找所有库

    【讨论】:

    • 这不是对问题的回答,而是对这个问题的评论。
    猜你喜欢
    • 2017-04-27
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多