我在OS X中编码 这是我的Makefile:
#makefile for stack_5_1
# Yitong Zhou
stack_5 : main.o Stack.o LIFO_Stack.o Peekback_Stack.o
g++ -o stack_5 main.o Stack.o LIFO_Stack.o Peekback_Stack.o
main.o: main.cpp Stack.h LIFO_Stack.h Peekback_Stack.h
g++ -c main.cpp
Stack.o: Stack.cpp Stack.h
g++ -c Stack.cpp
LIFO_Stack.o: LIFO_Stack.cpp LIFO_Stack.h
g++ -c LIFO_Stack.cpp
Peekback_Stack.o: Peekback_Stack.cpp Peekback_Stack.h
g++ -c Peekback_Stack.cpp
clean:
rm -rf *.o stack_5
错误:
..... // very very long
Dwarf Exception Unwind Info (__eh_frame) in Stack.o
Dwarf Exception Unwind Info (__eh_frame) in LIFO_Stack.o
Dwarf Exception Unwind Info (__eh_frame) in Peekback_Stack.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [stack_5] Error 1
gcc和g ++有什么区别?当我用gcc替换g ++时,为什么我的编译失败?
顺便说一下,我怎么能确保我的makefile可以在Cygwin,linux,OS X和其他环境中正确运行。
答案 0 :(得分:6)
gcc用于默认编译C
g ++默认用于编译C ++
主要区别在于g ++透明地添加了选项-x c++
(使用C ++)和-lstdc++
(使用C ++标准库)。
试试这个Makefile:
stack_5: main.o Stack.o LIFO_Stack.o Peekback_Stack.o
main.o: main.cpp Stack.h LIFO_Stack.h Peekback_Stack.h
Stack.o: Stack.cpp Stack.h
LIFO_Stack.o: LIFO_Stack.cpp LIFO_Stack.h
Peekback_Stack.o: Peekback_Stack.cpp Peekback_Stack.h
make会根据文件扩展名自动填写合理的规则。
另请查看-MM
gcc选项。它将自动生成正确的make依赖项(哪些头文件),因此您无需手动维护此列表。 make手册和gcc手册中有更多关于如何使用它的内容。
答案 1 :(得分:2)
gcc
作为链接器IIRC,不会链接到标准c++
库,例如-lstdc++
。不确定是否足以确保一切都适用于所有系统,您可能需要使用自动工具或类似工具。
答案 2 :(得分:0)
gcc用于编译普通C,而g ++接受(兼容)C和C ++代码。
这可能是你错误的原因。