我正在尝试交叉编译使用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})
有什么问题?
答案 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会自动查找所有库