使用MAKE_TOOLCHAIN_FILE时,cmake无法找到(= link)boost库

时间:2014-07-02 13:08:14

标签: c++ boost cmake

我正在尝试交叉编译使用boost的C ++应用程序。所以我自己编译了一下。对于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})

有什么问题?

1 个答案:

答案 0 :(得分:0)

我不明白为什么,但以下内容:

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_INCLUDEDIR已更改为Boost_INCLUDE_DIR。如果设置了这个变量,当使用FIND_PACKAGE(Boost ...)时,CMake会自动查找所有库

相关问题