【问题标题】:GCC 4.8.4 Error on Ubuntu 14.04 VM: -std=c++11 flag isn't being detectedUbuntu 14.04 VM 上的 GCC 4.8.4 错误:未检测到 -std=c++11 标志
【发布时间】:2015-10-14 10:04:14
【问题描述】:

我在网上到处寻找,似乎无法找到解决此问题的方法。我在makefile和env文件中尝试了-std=c++11、-std=c++0x和-std=c++1y标志,都对以下错误没有影响:

'to_string' is not a member of 'std'
range based 'for' loops are not allowed in C++98 mode

我正在尝试运行基于 RepastHPC 构建的 C++ 程序,该程序在 Ubuntu 14.04 VirtualBox VM 上运行。 RepastHPC 本身的 makefile 和 C++ 代码的 env 文件都包含该标志。 env 文件在 C++ 代码的 makefile 中使用,因此它不会从那里丢失。

# Repast HPC 
# ENVIRONMENT DEFINITIONS

MPICXX=/home/repasthpc/repast_hpc-2.1.0/INSTALLATION/mpich-3.1.4/src/env/mpicxx
-std=c++11 -D USE_CPP11 -stdlib=libc++

BOOST_INCLUDE=-I/usr/local/include/
BOOST_LIB_DIR=-L/usr/local/lib/
BOOST_LIBS=-lboost_mpi-mt-s -lboost_serialization-mt-s -lboost_system-mt-s -lboost_filesystem-mt-s

REPAST_HPC_INCLUDE=-I/usr/local/include/
REPAST_HPC_LIB_DIR=-L/usr/local/lib/
REPAST_HPC_LIB=-lrepast_hpc-2.1

TISSUE_INCLUDE=-I/Users/repasthpc/Desktop/hpcmodel/angiogenesis_osteogenesis_simulator/src/

------------------------------------------------------------

# Repast HPC
# MANUAL BUILD MAKEFILE

# VARIABLES (Supply values for these; for definitions and examples, see INSTALL)
CXX=mpicxx      -std=c++11 -D USE_CPP11
CXXLD=mpicxx
BOOST_INCLUDE_DIR=/usr/local/include
BOOST_LIB_DIR=/usr/local/lib
BOOST_INFIX=-mt
NETCDF_INCLUDE_DIR=/usr/local/include
NETCDF_LIB_DIR=/usr/local/lib
CURL_INCLUDE_DIR=/usr/local/include
CURL_LIB_DIR=/usr/local/lib

** 这不是makefile的结束,而是相关部分的结束**

有什么想法吗?我彻底糊涂了。

谢谢! 雷切尔

【问题讨论】:

  • 如果MPICXX=...-std=c++11 确实在makefile 中的两个不同的行上,那么-std=c++11 行是不是MPICC 分配的一部分并且将不在编译期间使用。
  • 我已经在同一行中尝试过,但无论是空格还是制表符分隔,这也会给我一个错误:g++: error: unrecognized command line option '-stdlib=libc++ '
  • 我刚刚删除了该标志,这似乎解决了该特定问题。

标签: ubuntu c++11 gcc makefile repast-hpc


【解决方案1】:

这个 Makefile 有几个问题:

1)CXX=mpicxx 没有做你想做的事。

正确的做法是

CXX=$(MPICXX)

这转化为:

CXX=/home/repasthpc/repast_hpc-2.1.0/INSTALLATION/mpich3.1.4/src/env/mpicxx

2) 还要注意-std=c++11 -D USE_CPP11 -stdlib=libc++ 部分不包含在上面的 CXX 中。这是因为我们需要一个 '\' 来告诉 Make 还有另一行。

所以试试这个:

MPICXX=/home/repasthpc/repast_hpc-2.1.0/INSTALLATION/mpich-3.1.4/src/env/mpicxx \
-std=c++11 -D USE_CPP11 -stdlib=libc++

BOOST_INCLUDE=-I/usr/local/include/
BOOST_LIB_DIR=-L/usr/local/lib/
BOOST_LIBS=-lboost_mpi-mt-s -lboost_serialization-mt-s -lboost_system-mt-s -lboost_filesystem-mt-s

REPAST_HPC_INCLUDE=-I/usr/local/include/
REPAST_HPC_LIB_DIR=-L/usr/local/lib/
REPAST_HPC_LIB=-lrepast_hpc-2.1

TISSUE_INCLUDE=-I/Users/repasthpc/Desktop/hpcmodel/angiogenesis_osteogenesis_simulator/src/

------------------------------------------------------------

# Repast HPC
# MANUAL BUILD MAKEFILE

# VARIABLES (Supply values for these; for definitions and examples, see INSTALL)
CXX=$(MPICXX)      -std=c++11 -D USE_CPP11
CXXLD=$(MPICXX)
BOOST_INCLUDE_DIR=/usr/local/include
BOOST_LIB_DIR=/usr/local/lib
BOOST_INFIX=-mt
NETCDF_INCLUDE_DIR=/usr/local/include
NETCDF_LIB_DIR=/usr/local/lib
CURL_INCLUDE_DIR=/usr/local/include
CURL_LIB_DIR=/usr/local/lib

【讨论】:

  • 对不起,第一个实际上产生了很多错误。我暂时把它换回来。实施第二个,现在得到以下错误: /usr/bin/ld: 找不到 -lboost_mpi-mt-s /usr/bin/ld: 找不到 -lboost_serialization-mt-s /usr/bin/ld: 找不到-lboost_system-mt-s /usr/bin/ld: 找不到 -lboost_filesystem-mt-s – 不确定从哪里来,/usr/bin/ld 似乎不在这些文件中的任何位置。
  • 原来我在 env 文件中的文件名末尾有一个“-s”,而不是实际文件名。现在一切正常。谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-08-08
  • 2019-04-16
  • 2023-03-17
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多