【问题标题】:AirSim/Unity build on macOS ('boost/filesystem.hpp' file not found)AirSim/Unity 在 macOS 上构建(未找到“boost/filesystem.hpp”文件)
【发布时间】:2020-03-18 16:00:52
【问题描述】:

我正在尝试在 MacOS Catalina 上安装 AirSim/Unity。当我运行 Unity/build.sh 时出现致命错误:

In file included from /Users/nfirbas/Documents/AirSim/Unity/AirLibWrapper/AirsimWrapper/Source/Logger.cpp:3:
/Users/nfirbas/Documents/AirSim/Unity/AirLibWrapper/AirsimWrapper/Source/Logger.h:6:11: fatal error: 'boost/filesystem.hpp' file not found
        #include <boost/filesystem.hpp>
                 ^~~~~~~~~~~~~~~~~~~~~~
1 warning and 1 error generated.
make[2]: *** [CMakeFiles/AirsimWrapper.dir/Source/Logger.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....

我已经用 brew 安装了 boost。这是我第一次使用 brew,所以我假设我需要编辑我的 CMakeList.txt。我尝试自己更改它,但我没有得到它的工作。

我的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.5.0)

if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    set(MACOSX TRUE)
endif()

find_path(AIRSIM_ROOT NAMES AirSim.sln PATHS ".." "../.." "../../.." "../../../.." "../../../../.." "../../../../../..")
message(AirSim Root directory: ${AIRSIM_ROOT})

LIST(APPEND CMAKE_MODULE_PATH "${AIRSIM_ROOT}/cmake/cmake-modules")
LIST(APPEND CMAKE_MODULE_PATH "${RPC_SOURCE_DIR}/cmake")
LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")


INCLUDE("${AIRSIM_ROOT}/cmake/cmake-modules/CommonSetup.cmake")
INCLUDE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/rpc-setup.cmake")
INCLUDE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/mav-setup.cmake")
INCLUDE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/airlib-setup.cmake")
INCLUDE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/airsimwrapper-setup.cmake")

IncludeEigen()

project(AirsimWrapper VERSION 0)

# RPC includes & source files
BuildRpc()
# MavLink source files
BuildMavLink()
#AirLib source files
BuildAirlib()
#AirsimWrapper source files
BuildAirsimWrapper()


###################### Link source files to library ######################################
if (${APPLE})
    add_library(
        ${PROJECT_NAME} MODULE
        ${RPC_LIBRARY_SOURCE_FILES}
        ${MAVLINK_LIBRARY_SOURCE_FILES}
        ${AIRLIB_LIBRARY_SOURCE_FILES}
        ${AIRSIMWRAPPER_LIBRARY_SOURCE_FILES}
    )

    set_target_properties(${PROJECT_NAME} PROPERTIES BUNDLE TRUE)
else ()
    add_library(
        ${PROJECT_NAME} SHARED
        ${RPC_LIBRARY_SOURCE_FILES}
        ${MAVLINK_LIBRARY_SOURCE_FILES}
        ${AIRLIB_LIBRARY_SOURCE_FILES}
        ${AIRSIMWRAPPER_LIBRARY_SOURCE_FILES}
    )
endif ()

target_link_libraries(${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT}  -lstdc++ -lpthread -lboost_filesystem)



##################### Build Options #############################3
# Rpc
RpcCheckMSVN()
RpcCmakePkg()
RpcMSVNConfig()

【问题讨论】:

  • 您告诉您的库使用-lboost_filesystem 与 Boost 链接,但这并没有告诉您的库在哪里可以找到 Boost 标头。您安装了哪个版本的 Boost,您使用的是哪个版本的 CMake?
  • 我安装了 boost 版本 1.72.0,我使用的是 cmake 版本 3.16.5

标签: c++ unity3d boost cmake airsim


【解决方案1】:

你已经告诉你的库目标链接到boost_filesystem,但你没有在你的 CMake 中传达 where 来找到 Boost 头文件。

使用 CMake 查找 Boost 的惯用方法是使用 Boost 1.70 及更高版本中现在随 Boost 提供的配置文件(例如 BoostConfig.cmake)。您可以通过调用find_package(Boost ...) 来使用这些,然后与导入的目标Boost::filesystem 链接:

# Tell CMake to locate Boost on your machine, specifically
# looking for the filesystem library.
find_package(Boost REQUIRED COMPONENTS filesystem)

...
# Link the Boost::filesystem target, which includes the Boost headers.
target_link_libraries(${PROJECT_NAME} PUBLIC
    ${CMAKE_THREAD_LIBS_INIT} 
    -lstdc++ 
    -lpthread 
    Boost::filesystem
)

这也会拉入 Boost 标头,因此您不需要显式调用 target_include_directories() 来指定 Boost 标头的位置。


注意:为确保在您的系统上安装了标头,除了安装 boost 之外,您可能还需要安装 boost-devel

【讨论】:

    猜你喜欢
    • 2021-05-18
    • 2018-08-15
    • 1970-01-01
    • 2022-07-18
    • 2017-08-17
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多