微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Clang 无法在非标准位置找到头文件

如何解决Clang 无法在非标准位置找到头文件

我目前正在尝试构建 OpenPose。首先,我将尝试描述环境以及由此产生的错误。 Caffe 是从源代码构建的,它完整地位于 [/Users...]/openpose/3rdparty 而不是通常的位置(为了隐私,我在这文章中编辑了文件路径的某些部分)。它的所有包含文件都可以在 [/Users...]/openpose/3rdparty/caffe/include/caffe 中找到。输入此命令后:

make -j`sysctl -n hw.logicalcpu` CXXFLAGS=-I[/Users/..]/openpose/3rdparty/caffe/include

出现以下错误

[  0%] Building CXX object src/openpose/CMakeFiles/openpose.dir/core/arraycpuGpu.cpp.o
[  1%] Building CXX object src/openpose/CMakeFiles/openpose.dir/face/faceExtractorCaffe.cpp.o
[  1%] Building CXX object src/openpose/CMakeFiles/openpose.dir/hand/handExtractorCaffe.cpp.o
[  2%] Building CXX object src/openpose/CMakeFiles/openpose.dir/net/bodyPartConnectorCaffe.cpp.o
[  2%] Building CXX object src/openpose/CMakeFiles/openpose.dir/net/maximumCaffe.cpp.o
[  2%] Building CXX object src/openpose/CMakeFiles/openpose.dir/net/netCaffe.cpp.o
[  2%] Building CXX object src/openpose/CMakeFiles/openpose.dir/net/netopenCv.cpp.o
[  2%] Building CXX object src/openpose/CMakeFiles/openpose.dir/net/nmsCaffe.cpp.o
[/Users/..]/openpose/src/openpose/core/arraycpuGpu.cpp:3:14: Fatal error: 'caffe/blob.hpp' file not found
    #include <caffe/blob.hpp>
             ^~~~~~~~~~~~~~~~
1 error generated.
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/core/arraycpuGpu.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
[/Users/etc..]/openpose/src/openpose/net/maximumCaffe.cpp:3:14: Fatal error: 'caffe/blob.hpp' file not found
    #include <caffe/blob.hpp>
             ^~~~~~~~~~~~~~~~
1 error generated.
[/Users..]/openpose/src/openpose/net/nmsCaffe.cpp:3:14: Fatal error: 'caffe/blob.hpp' file not found
    #include <caffe/blob.hpp>
             ^~~~~~~~~~~~~~~~
[/Users..]/openpose/src/openpose/net/netCaffe.cpp:6:14: Fatal error: 'caffe/net.hpp' file not found
    #include <caffe/net.hpp>
             ^~~~~~~~~~~~~~~
[/Users..]/openpose/src/openpose/net/netopenCv.cpp:7:14: Fatal error: 'caffe/net.hpp' file not found
    #include <caffe/net.hpp>
             ^~~~~~~~~~~~~~~
[/Users..]/openpose/src/openpose/net/bodyPartConnectorCaffe.cpp:3:14: Fatal error: 'caffe/blob.hpp' file 1not error  generatedfound.

    #include <caffe/blob.hpp>
             ^~~~~~~~~~~~~~~~
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/net/maximumCaffe.cpp.o] Error 1
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/net/nmsCaffe.cpp.o] Error 1
[/Users..]/openpose/src/openpose/face/faceExtractorCaffe.cpp:3:14: Fatal error: 'caffe/blob.hpp' file not found
    #include <caffe/blob.hpp>
             ^~~~~~~~~~~~~~~~
[/Users..]/openpose/src/openpose/hand/handExtractorCaffe.cpp:3:14: Fatal error: 'caffe/blob.hpp' file not found
    #include <caffe/blob.hpp>
             ^~~~~~~~~~~~~~~~
1 error generated.
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/net/netCaffe.cpp.o] Error 1
1 error generated.
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/net/bodyPartConnectorCaffe.cpp.o] Error 1
1 error generated.
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/net/netopenCv.cpp.o] Error 1
1 error generated.
1 error generated.
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/face/faceExtractorCaffe.cpp.o] Error 1
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/hand/handExtractorCaffe.cpp.o] Error 1
make[1]: *** [src/openpose/CMakeFiles/openpose.dir/all] Error 2
make: *** [all] Error 2

为什么 clang 找不到 blob.hpp 和其他头文件?我希望它导航到 openpose/3rdparty/caffe/include,然后从那里找到 caffe/blob.hpp 以及其他标题。我对 make/c++ 很陌生,所以除了将 CXXFLAGS 直接添加到 Makefile 而不是通过终端传递它之外,我还没有尝试过很多东西(没有用)。 这是生成文件https://pastebin.com/yY7R9jVe

解决方法

您正在使用 cmake。 cmake 生成的 makefile 不符合“标准”makefile 约定;特别是他们不使用 CXXFLAGS 变量。

当您使用 cmake 时,您不需要通过更改 make 的调用来修改编译器选项。相反,您需要通过编辑 CMakeLists.txt 文件或向用于生成 makefile 的 cmake 命令行提供覆盖值来修改编译器选项。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。