0

我在 Raspberry Pi 中下载了 libboost1.50-all,并使用线程成功编译并执行了一个程序。在 CMake 中也可以找到库。然后,我将 boost 及其包含的库分别从 /usr/lib 和 /usr/include/boost 复制到 C:\Boost ,使得层次结构变为:

C:
  -> Boost
      -> lib
         ... files
      -> include
         -> boost
            ... files

然后我使用了相同的 CMakeLists.txt 和源代码,但没有找到该库。

注意:我使用的交叉编译器可以正常工作,并且我能够使用 std 库在 Cygwin 中使用 CMake 生成可执行文件。我什至指定了库的位置以及用户和根目录。

有什么我错过的吗?

cmake_minimum_required(VERSION 2.8)

set(BOOST_ROOT C:/Boost/)
set(BOOST_INCLUDEDIR C:/Boost/include/)
set(BOOST_LIBRARYDIR C:/Boost/lib/)

SET(Boost_DEBUG ON)
find_package(Boost 1.50.0 COMPONENTS thread system)

if (Boost_FOUND)
    include_directories (${Boost_INCLUDE_DIRS})
    add_executable (thread thread.cpp)
    target_link_libraries(thread ${Boost_LIBRARIES})
endif()

在此处输入图像描述

4

2 回答 2

1

使用 CMAKE -GUI 然后检查是否检测到您的 boost 库。如果没有,则在 CMAKE-GUI 中手动设置并再次配置。

于 2013-10-30T10:32:35.540 回答
0

我能想到的临时解决方案!

我将 boost lib 和 include 放置在安装交叉编译器的位置,因为交叉编译能够将源代码链接到 libstdc++。

库放在这里:

C:\cygwin\opt\cross\x-tools\arm-unknown-linux-gnueabi\arm-unknown-linux-gnueabi\sysroot\lib

包含文件放置在这里:

C:\cygwin\opt\cross\x-tools\arm-unknown-linux-gnueabi\arm-unknown-linux-gnueabi\include\c++\4.6.3

现在的 CMakeLists 内容如下:

cmake_minimum_required(VERSION 2.8)
add_executable (thread main.cpp)
target_link_libraries(thread boost_thread boost_system)

打开 Cygwin 终端并在那里调用 cmake,然后 make。中提琴!现在编译成功了!:>

神奇之处就在这里:

target_link_libraries(thread boost_thread boost_system)

我在 Stackoverflow 的一个问题中发现了这一点,有人说要手动链接库。

即使它有效,为什么 CMake 无法在 Windows(Cygwin 终端)和 Linux(VMware)中检测到 boost 库——这些我试过了——但是使用相同的 CMakeLists 在 Raspberry Pi(Raspbian)中找到了该库.txt 和 main.cpp。CMake的目的不就是找到库本身吗?如果我只是手动链接它们,最好这样做:

arm-unknown-linux-gnueabi-g++.exe -lboost_thread -lboost_system
于 2013-10-30T14:11:20.353 回答