用g++编译c++,从-c到-std=c++11

compiling c++ with g++ from -c to -std=c++11

本文关键字:-std c++11 g++ 编译 c++      更新时间:2024-04-28

当我用g++-c运行这些文件的代码时,我没有得到任何错误,但当我用g++-std=c++11运行它时,我得到了一个链接器错误。我假设这意味着错误不在文件的代码中,而是在makefile中。我该怎么解决这个问题?

parse: parse.o scan.o
g++ -std=c++11 -Wall parse.o scan.o -o parse
#g++ -o parse parse.o scan.o
clean:
rm -f parse.o parse
parse.o: scanpp.h parse.cpp 
#g++ -c parse.cpp
g++ -std=c++11 parse.cpp
scan.o: scanpp.h scan.cpp 
#g++ -c scan.cpp
g++ -std=c++11 scan.cpp

这是我运行make 时遇到的错误

#g++ -c parse.cpp
g++ -std=c++11 parse.cpp
Undefined symbols for architecture x86_64:
"scan()", referenced from:
match(token) in parse-405e06.o
_main in parse-405e06.o
"_token_image", referenced from:
match(token) in parse-405e06.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [parse.o] Error 1

-c表示只运行编译器而不运行链接器。如果您的意图只是更改c++版本,那么在添加其他标志时应该保留它。