【发布时间】: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})
怎么了?
【问题讨论】: