0
我沒有Unix的經驗,並且C++的經驗非常有限。我最近分配了一個編碼項目,要求我們提供C++源代碼和一個makefile。Makefile:未定義引用'std :: ...'
教授給了一個示例makefile,並提到我們應該嚴格按照它的格式。我試圖讓它爲一個單獨的文件「main.cpp」工作,我可以在下載MinGW和Cygwin後從終端編譯和運行。但是,試圖運行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 [email protected] ${FFLAGS} $<
.F90.o:
${FC} -c -o [email protected] ${FFLAGS} $<
.c.o:
${CC} -c -o [email protected] ${FFLAGS} $<
.cpp.o:
${CXX} -c -o [email protected] ${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)'
這個項目本身與計算機科學無關 - 這只是我們必須提供交付成果的格式,所以我對我努力實現它的努力感到有點沮喪。
非常感謝您能給予的任何幫助!
哇。這樣一個簡單的修復,現在一切正常。非常感謝您的幫助,以及我可以實際遵循的解釋! –
您也可以使用'$ {CXXFLAGS}'來代替'FFLAGS',因爲語言選項可能不同,所以使用CXX進行C++編譯。 –