我有一个包含使用boost 1.57的库的项目,该库也包含在内。但是,GCC编译器(默认的Xcode CLI工具v6.0 GCC版本4.2.1)在获取其他目录时不会获取包含目录的提升。这是怎么回事?
这是发布的最终GCC命令:
gcc -g -stdlib=libstdc++ -Wall -Wno-error -ferror-limit=1000 -fmessage-length=0
-DHCUBE_NOGUI -DTIXML_USE_STL -DMACOS -mmacosx-version-min=10.5 -arch i386 -arch x86_64
-I/Applications/Webots6.3.0/include/controller/c
-I/Users/mtw800/experimentSuite/experiment/../HyperNEAT/tinyxmldll/include
-I/Users/mtw800/experimentSuite/experiment/../HyperNEAT/NE/HyperNEAT/NEAT/include
-I/Users/mtw800/experimentSuite/experiment/../HyperNEAT/JGTL/include
-I/Users/mtw800/experimentSuite/experiment/../HyperNEAT/boost_1_57_0/boost/ -DXML1
-c ModHyperNEAT/mod_ctrler7.cpp -o controllers/mod_ctrler7_1.o
错误GCC给了我:
In file included from ModHyperNEAT/mod_ctrler7.cpp:30:
In file included from /Users/mtw800/experimentSuite/experiment/../HyperNEAT/NE/HyperNEAT/NEAT/include/NEAT.h:4:
In file included from /Users/mtw800/experimentSuite/experiment/../HyperNEAT/NE/HyperNEAT/NEAT/include/NEAT_Globals.h:4:
/Users/mtw800/experimentSuite/experiment/../HyperNEAT/NE/HyperNEAT/NEAT/include/NEAT_Defines.h:23:10:
fatal error: 'boost/shared_ptr.hpp' file not found
#include <boost/shared_ptr.hpp>
^
1 error generated.
make: *** [experiment-modular] Error 1
提升包括路径:
-I/Users/mtw800/experimentSuite/experiment/../HyperNEAT/boost_1_57_0/boost/
存在并调用find `pwd` -name shared_ptr.hpp
会得到以下结果:
MW-020708:boost_1_57_0 mtw800$ pwd
/Users/mtw800/experimentSuite/HyperNEAT/boost_1_57_0
MW-020708:boost_1_57_0 mtw800$ find `pwd` -name shared_ptr.hpp
/Users/mtw800/experimentSuite/HyperNEAT/boost_1_57_0/boost/asio/detail/shared_ptr.hpp
/Users/mtw800/experimentSuite/HyperNEAT/boost_1_57_0/boost/interprocess/smart_ptr/shared_ptr.hpp
/Users/mtw800/experimentSuite/HyperNEAT/boost_1_57_0/boost/serialization/shared_ptr.hpp
/Users/mtw800/experimentSuite/HyperNEAT/boost_1_57_0/boost/shared_ptr.hpp
/Users/mtw800/experimentSuite/HyperNEAT/boost_1_57_0/boost/smart_ptr/shared_ptr.hpp
/Users/mtw800/experimentSuite/HyperNEAT/boost_1_57_0/boost/thread/csbl/memory/shared_ptr.hpp
所以我知道boost包含库,路径是正确的,甚至是shared_ptr的头文件也在那里。为什么GCC没有拿起我的包含文件夹路径?
我已经通过删除所有-I标志并在GCC发出无法找到它们的错误时重新添加它们来测试其他包含路径被拾取的路径(应该如此)。
好奇的是,如果我用home-brew安装boost,并且进一步改变什么,那我的编译脚本只是“有效”,因为自制软件可能会将boost链接到默认情况下由GCC搜索的目录。这很好,但是,我不希望GCC使用自制程序提升,因为它必须在不使用自制程序的系统上编译。我该怎么办?为什么海湾合作委员会只通过排除一个包含文件夹而不是所有其他文件夹来纠缠我?什么样的非确定性编译器automagick正在这里发生?我正在使用OSX Yosemite 10.10,上面提到了Xcode开发人员工具。另一台计算机使用相同的OSX和相同的GCC(相同的Xcode开发工具)。
答案 0 :(得分:1)
您需要从:
中移除最后一个元素(boost
)
-I/Users/mtw800/experimentSuite/experiment/../HyperNEAT/boost_1_57_0/boost/
鉴于源文件使用#include <boost/whatever.h>
,预处理器在搜索包含目录时期望找到boost
子目录。