C++ 编译中的别名声明错误

Alias declaration error in C++ compilation

提问人:cr_007 提问时间:11/17/2023 最后编辑:user4581301cr_007 更新时间:11/17/2023 访问量:60

问:

我正在尝试在我的 Mac OS (Ventura 13.3) 上编译 C++ 代码。当我尝试使用 make 命令编译 C++ 代码时,它会抛出一个错误,该错误通常作为警告发送。我发现的一些解决方案是用标志重新编译代码:还有一些人说,如果你的C++编译器已经过时,这些警告通常会作为错误发送。我使用 和 检查了我的 C++ 编译器的版本。我在下面粘贴了错误的屏幕截图。我没有使用过时版本的 C++ 编译器。那么,为什么这仍然会抛出错误而不是将其作为警告传递呢?难道,我需要专门用于此编译才能正常工作吗?如果是这样,我该如何安装和使用它?我将不胜感激任何建议或想法。make CPP=g++-14 CXX=g++-14 myfileg++ --versionClang 14.0.3g++-11

注意:我本来会在这里给出代码,但大小太大且太复杂,并且需要各种依赖项。因此,对于没有安装整个代码网络(+依赖项)的任何人来说,它都是无用的。如有必要,我可以提供 MakeFile。

/opt/local/include/boost/math/tools/promotion.hpp:101:67: error: alias declarations are a C++11 extension [-Werror,-Wc++11-extensions]
      template <> struct promote_args_2<int, int> {  using type = double; };
                                                                  ^
/opt/local/include/boost/math/tools/promotion.hpp:102:69: error: alias declarations are a C++11 extension [-Werror,-Wc++11-extensions]
      template <> struct promote_args_2<int, float> {  using type = double; };
                                                                    ^
/opt/local/include/boost/math/tools/promotion.hpp:103:69: error: alias declarations are a C++11 extension [-Werror,-Wc++11-extensions]
      template <> struct promote_args_2<float, int> {  using type = double; };
                                                                    ^
/opt/local/include/boost/math/tools/promotion.hpp:104:70: error: alias declarations are a C++11 extension [-Werror,-Wc++11-extensions]
      template <> struct promote_args_2<int, double> {  using type = double; };
                                                                     ^
/opt/local/include/boost/math/tools/promotion.hpp:105:70: error: alias declarations are a C++11 extension [-Werror,-Wc++11-extensions]
      template <> struct promote_args_2<double, int> {  using type = double; };
                                                                     ^
/opt/local/include/boost/math/tools/promotion.hpp:106:75: error: alias declarations are a C++11 extension [-Werror,-Wc++11-extensions]
      template <> struct promote_args_2<int, long double> {  using type = long double; };
                                                                          ^
/opt/local/include/boost/math/tools/promotion.hpp:107:75: error: alias declarations are a C++11 extension [-Werror,-Wc++11-extensions]
      template <> struct promote_args_2<long double, int> {  using type = long double; };
                                                                          ^
/opt/local/include/boost/math/tools/promotion.hpp:108:72: error: alias declarations are a C++11 extension [-Werror,-Wc++11-extensions]
      template <> struct promote_args_2<float, double> {  using type = double; };
                                                                       ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
4 warnings and 20 errors generated.

MakeFile文件:

ifndef NUCNET_TARGET
NUCNET_TARGET = ../..
endif

NNT_DIR = $(NUCNET_TARGET)/nnt
USER_DIR = $(NUCNET_TARGET)/user
BUILD_DIR = $(NUCNET_TARGET)/build

export NNT_NO_OPENMP=1
GC = clang++
CXXFLAGS = -std=c++11

include $(BUILD_DIR)/Makefile

include $(BUILD_DIR)/Makefile.sparse

include $(USER_DIR)/Makefile.inc

VPATH = $(BUILD_DIR):$(NNT_DIR):$(USER_DIR)

ifdef NNT_HYDRO_CODE
  ifeq ($(NNT_HYDRO_CODE), exponential_expansion)
    CFLAGS += -DHYDRO_EXP_EXPANSION
  else ifeq ($(NNT_HYDRO_CODE), traj)
    CFLAGS += -DHYDRO_TRAJ
  else ifeq ($(NNT_HYDRO_CODE), wind)
    CFLAGS += -DHYDRO_WIND
  else ifeq ($(NNT_HYDRO_CODE), shock)
    CFLAGS += -DHYDRO_SHOCK
  endif
else
    CFLAGS += -DHYDRO_EXP_EXPANSION
endif

NETWORK_OBJS = $(WN_OBJ)        \
               $(NNT_OBJ)   \
               $(HYDRO_OBJ) \
               $(SOLVE_OBJ) \
               $(USER_OBJ)

ifdef NNT_USE_SPARSKIT2
  CFLAGS += -DSPARSKIT2
  NETWORK_OBJS += $(SP_OBJ) $(ILU_OBJ)
  NET_DEP = sparse
  FLIBS= -L$(SPARSKITDIR) -lskit -lstdc++
  MC = $(FF)
  ifeq ($(GC), clang++)
    CC+= -stdlib=libstdc++
    
  endif
else
  MC = $(CC)
endif

NET_DEP += $(NETWORK_OBJS)

NETWORK_EXEC = run_constant_entropy \
               run_entropy      \
               run_energy_generation    \
               run_multiple_zone_omp    \
               run_single_zone

$(NETWORK_EXEC): $(NET_DEP)
    $(CC) -c -o $(OBJDIR)/[email protected] [email protected]
    $(MC) $(NETWORK_OBJS) $(OBJDIR)/[email protected] -o $(BINDIR)/$@ $(CLIBS) $(FLIBS)

.PHONY all_network : $(NETWORK_EXEC)

.PHONY: clean_network cleanall_network

clean_network: 
    rm -f $(NETWORK_OBJS)

cleanall_network: clean_network
    rm -f $(BINDIR)/$(NETWORK_EXEC) $(BINDIR)/$(NETWORK_EXEC).exe

NETWORK_DEF = yes
C G Clang++

评论


答: 暂无答案