gpt4 book ai didi

c++ - Makefile:对 'std::...' 的 undefined reference

转载 作者:行者123 更新时间:2023-11-28 05:12:11 25 4
gpt4 key购买 nike

我没有使用 Unix 的经验,对 C++ 的经验也非常有限。我最近分配了一个编码项目,要求我们提供 C++ 源代码和 makefile。

教授给出了一个示例makefile,并提到我们应该严格遵循它的格式。我试图让它为单个文件“main.cpp”工作,我可以在下载 MinGW 和 Cygwin 后从终端编译和运行它。但是,尝试运行 makefile 会导致出现一堆“未定义的对...的引用”错误。

makefile 是:(我只更改了项目名称和目标文件)

VPATH = ./src:

.SUFFIXES : .F90 .f .f90 .c .o

# Compiler types
FC = gfortran
CC = gcc
CXX = gcc

# Optimization level
OPT = -O2

# Relevant flags
FFLAGS = ${OPT}
CFLAGS = ${OPT}
CXXFLAGS = ${OPT}

# Name of the program
PROG = main.x

# List of object files
OBJ = main.o

.f90.o:
${FC} -c -o $@ ${FFLAGS} $<

.F90.o:
${FC} -c -o $@ ${FFLAGS} $<

.c.o:
${CC} -c -o $@ ${FFLAGS} $<

.cpp.o:
${CXX} -c -o $@ ${FFLAGS} $<

all:${PROG}

$(PROG): ${OBJ}
$(CXX) ${FFLAGS} $(OBJ) -o ${PROG}
mv ${PROG} ./bin/

clean:
/bin/rm -f *.mod *.o *.x *~ ./src/*.o ./src/*~

uninstall:
rm -f bin/${PROG}

renew:
touch *

我得到的错误列表的一个片段是:

main.o:main.cpp:(.text.startup+0x1e): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)'
main.o:main.cpp:(.text.startup+0x1e): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)'

该项目本身与计算机科学无关 - 这只是我们必须提供可交付成果的格式,所以我对我为使其发挥作用所付出的努力感到有点沮丧。

非常感谢大家提供的任何帮助!

最佳答案

改变

CXX = gcc

CXX = g++

原因是

$(PROG): ${OBJ}
$(CXX) ${FFLAGS} $(OBJ) -o ${PROG}

规则目前使用 C 编译器进行最终链接,但 C++ 对象需要一些特殊处理。基本上是 -lstdc++,您可以添加它,但最好只将 C++ 编译器用于最终链接,尤其是因为名为 CXX 的变量通常表示 C++ 编译器,而不是 C 编译器。

仅供引用,就风格而言,最好将 ${...} (shell 语法)替换为 $(...) (正常的 Makefile 语法) ).

关于c++ - Makefile:对 'std::...' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43289851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com