用g++编译c++,从-c到-std=c++11
compiling c++ with g++ from -c to -std=c++11
当我用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++版本,那么在添加其他标志时应该保留它。
相关文章:
- C++中的VLA,扩展名为std=C++11
- 编译器不会使用 -std=c++11 编译智能指针
- C ++枚举范围无法使用-std=c ++ 98进行编译,但使用-std=c ++ 11可以
- std::使用 -std=gnu++11 开关编译时相等错误
- "unix" C++预处理器宏未定义 -std=c++11
- 用STD = C 11或其他标准编译Boost,例如Ash C 14
- 网站组装 |错误:'C/ObjC'不允许使用无效'-std=c++11'参数
- G++ - 警告:扩展初始值设定项列表仅适用于 -std=C++11 或 -std=GNU++11
- 如何避免每次编译时都必须键入 -std=c++11
- 无法用"-std=c++11"编译《你好世界》
- 无法在Eclipse Neon.3中同时使用-std = C 11和-l/-l选项
- Cython -STD = C 11错误,使用C和C
- 扩展初始化器列表仅可用-STD = C 11或-STD = GNU 11中的C
- 为什么将语言标准从-STD = GNU 98到-STD = GNU 11
- 为什么 std::move 未定义,尽管编译器使用 -std=c++11 调用
- 我可以安全地将编译的库与-STD = C 11和-STD = C 14
- MATLAB MEX:-STD = C 11使用,但MEX错误仍然是错误
- Makefile with -std=c++11
- CUDA 8 编译错误与 -std=gnu++11
- QT 5.7将-STD = GNU 11添加到我的编译器标志,Clobbering -Std = C 14