Ubuntu虚拟机编译AIToolbox时make无法找到Boost的multi_array.hpp求助
编译报错解决方法
报错核心原因是:你使用了vcpkg工具链,vcpkg的Boost路径优先级高于你手动指定的BOOST_ROOT,导致cmake识别到的Boost路径和你实际放multi_array.hpp的路径不一致,同时你之前配置的target_link_libraries关联的目标名错误,配置没有生效。
具体解决步骤
- 第一步:清理历史构建缓存
进入你执行cmake命令的构建目录,删除旧的编译缓存,避免旧配置干扰:rm -rf CMakeCache.txt CMakeFiles/ - 第二步:调整cmake执行参数
新增-DBoost_NO_SYSTEM_PATHS=ON参数,强制cmake优先查找你指定的本地Boost路径,避免被vcpkg的配置覆盖:cmake .. -DBOOST_ROOT=/home/ben/AI/boost_1_77_0 -DBoost_NO_SYSTEM_PATHS=ON -DLPSOLVE_INCLUDE_PATH=/home/ben/AI/lpsolve -DVCPKG_TARGET_TRIPLET=x64-linux -DCMAKE_TOOLCHAIN_FILE=/home/ben/AI/vcpkg/scripts/buildsystems/vcpkg.cmake - 第三步:修正CMakeLists.txt配置
你之前给错误的目标名program加的配置不生效,从报错信息可知编译目标名为AIToolboxMDP,直接给该目标配置Boost头文件路径:find_package(Boost ${BOOST_VERSION_REQUIRED} REQUIRED) # 给实际编译目标配置头文件路径 target_include_directories(AIToolboxMDP SYSTEM PRIVATE ${Boost_INCLUDE_DIRS}) # 如用到Boost编译型库可新增以下配置,仅用头文件库可省略 target_link_libraries(AIToolboxMDP PRIVATE ${Boost_LIBRARIES}) - 第四步:重新执行编译
配置完成后重新执行make,如需排查可加VERBOSE参数查看详细编译参数:make VERBOSE=1
临时应急方案
如果以上步骤还是无效,可以直接指定C++编译参数强制加入Boost头文件路径:
export CXXFLAGS="-I/home/ben/AI/boost_1_77_0" make
补充排查:如果仍提示找不到文件,可执行
ls /home/ben/AI/boost_1_77_0/boost/multi_array.hpp确认文件存在且当前用户有读取权限。
内容的提问来源于stack exchange,提问作者osc1207
相关产品推荐
相关产品推荐

