我正在编译一个在共享集群上使用Boost的程序.我的主目录中有我自己的GCC和我使用的大多数程序和库,包括Boost 1.81.0.集群的Boost 1.66位于/usr/local/Include中.在某些情况下,GCC似乎更喜欢这些文件,而不是我本地的文件,这导致了错误.我怎么才能解决这个问题呢?
这是当前的包含搜索列表:
(编辑为显示-I/home/charlesprior/include
的效果)
GNU C++23 (GCC) version 12.1.0 (x86_64-pc-linux-gnu)
compiled by GNU C version 12.1.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version none
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/home/charlesprior/lib/gcc/x86_64-pc-linux-gnu/12.1.0/../../../../x86_64-pc-linux-gnu/include"
ignoring duplicate directory "/home/charlesprior/include"
as it is a non-system directory that duplicates a system directory
#include "..." search starts here:
#include <...> search starts here:
/home/charlesprior/lib/gcc/x86_64-pc-linux-gnu/12.1.0/../../../../include/c++/12.1.0
/home/charlesprior/lib/gcc/x86_64-pc-linux-gnu/12.1.0/../../../../include/c++/12.1.0/x86_64-pc-linux-gnu
/home/charlesprior/lib/gcc/x86_64-pc-linux-gnu/12.1.0/../../../../include/c++/12.1.0/backward
/home/charlesprior/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include
/usr/local/include
/home/charlesprior/include
/home/charlesprior/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include-fixed
/usr/include
End of search list.
如果我使用-I/home/charlesprior/include
(这就是我在上面的示例中所做的)来try 强制将其添加到顶部,GCC将忽略重复项.如果我在包括Boost的地方使用-I/some/other/dir/include
,一切都编译得很好.我不想这样做,只想让GCC使用我主目录中的包含文件.我收到的这类错误的一个例子是:
In file included from /home/charlesprior/include/boost/histogram/detail/detect.hpp:11,
from /home/charlesprior/include/boost/histogram/axis/traits.hpp:12,
from /home/charlesprior/include/boost/histogram/indexed.hpp:12,
from /home/charlesprior/include/boost/histogram/algorithm/empty.hpp:11,
from /home/charlesprior/include/boost/histogram/algorithm.hpp:15,
from /home/charlesprior/include/boost/histogram.hpp:27,
from test.cpp:1:
/usr/local/include/boost/mp11/function.hpp: In substitution of ‘template<class ... T> using variant_ca_base = boost::variant2::detail::variant
_ca_base_impl<std::integral_constant<bool, (static_cast<bool>(std::is_copy_constructible<T>::value) ... && static_cast<bool>(std::is_copy_assi
gnable<T>::value) ...)>::value, std::integral_constant<bool, (static_cast<bool>(std::is_trivially_destructible<T>::value) ... && (static_cast<
bool>(std::is_trivially_copy_constructible<T>::value) ... && static_cast<bool>(std::is_trivially_copy_assignable<T>::value) ...))>::value, T .
..> [with T = {T ...}]’:
/home/charlesprior/include/boost/variant2/variant.hpp:1449:96: required from here
/usr/local/include/boost/mp11/function.hpp:97:77: error: invalid use of pack expansion expression
其中,您可以看到GCC包含了一个来自/usr/local/Include的文件,这会导致错误.