0

私はOSXでコーディングしています。これが私の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++の違いは何ですか?g ++をgccに置き換えると、コンパイルが失敗するのはなぜですか?

ちなみに、Cygwin、Linux、OS X、そしておそらく他の環境でmakefileを正しく実行できるようにするにはどうすればよいでしょうか。

4

3 に答える 3

6

gcc はデフォルトで C をコンパイルするためのものです

g++ はデフォルトで C++ をコンパイルするためのものです

-x c++主な違いは、g++ がオプション(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 は、ファイル拡張子に基づいて適切なルールを自動的に入力します。

-MMgcc オプションも参照してください。正しい make 依存関係 (ヘッダー ファイル) が自動的に生成されるため、このリストを手動で維持する必要はありません。使用方法については、make マニュアルと gcc マニュアルに詳細があります。

于 2012-11-19T21:01:57.703 に答える
2

gccリンカーである IIRC はc++-lstdc++. すべてのシステムですべてが機能することを確認するだけで十分かどうかわからない場合は、autotools などを使用する必要があるかもしれません。

于 2012-11-19T21:02:51.113 に答える
0

gcc はプレーン C をコンパイルするためのものであり、g++ は (互換性のある) C および C++ コードを受け入れます。

それがおそらくあなたのエラーの理由です。

于 2012-11-19T21:03:10.287 に答える