2011-03-25 28 views
25

GCCを使ってCソースとC++ソースを一緒にコンパイルしようとしています。私は2回の警告を得ることを除いてGCCを使ってCとC++ファイルをまとめてコンパイル

gcc -std=c++0x test.cpp -std=c99 test.c -lstdc++

さて、これは、正常に動作します。

cc1plus: warning: command line option "-std=c99" is valid for C/ObjC but not for C++ 
cc1: warning: command line option "-std=c++0x" is valid for C++/ObjC++ but not for C 

そこで私は、このセットアップで-Werrorを使用することはできません。これらの警告を何とか抑えることができますか?

+0

あなたがしていることは、自分が行っていることとはまったく異なります。最初に言語標準をC++ 0xに設定し、それをC99に設定します。これは、_both_ファイルに対してC99を使用するのと同じです。しかし、C++をC99モードでコンパイルすることは不可能です。したがって、 '.cpp'ファイルの場合、コンパイラはデフォルトのC++ 98に戻ります。したがって、C99でCファイルを、C++でC++ファイルをコンパイルしています。解析オプションの間、GCCはどちらの言語バージョンオプションにも互換性のないファイルがあるとみなし、各オプションの警告を出力します。 – Damon

答えて

40

グラムとリンク++

gcc -c -std=c99 -o file1.o file1.c 
g++ -c -std=c++0x -o file2.o file2.cpp 
g++ -o myapp file1.o file2.o 
+0

ええ、確かに、私は1つのGCC呼び出しでコンパイルする必要があります。私はGCCを呼び出すためのAPIを使用しています、私はフラグを追加することができます。 –

+0

@Let_Me_Be:スクリプト/ラッパーを作成して呼び出すか、CをC++としてコンパイルしてC99を指定する必要はありません – Erik

+0

Hmm、実際にはC++の部分をプリコンパイルできます。 –

1

gccを使用する代わりにg ++ これは.cppファイルとcファイルの両方に適用されます。

+1

しかし 'g ++'は 'C'ファイルを' C++ 'としてコンパイルしませんか? –

+0

コンパイル命令を与えている間に、明示的に.cとして指定すると、自分の知る限り、.cppとして解釈されないことがあります。しかし、正しく知っている人とこれを確認してください。 – Chaithra

+5

g ++でコンパイルされたCソースファイルは、C++コードとしてコンパイルされます。 –

2

gccは、Cコンパイラであるとg++は、C++コンパイラで、個別のファイルをコンパイルします。 2つの言語を異なるスタイルで混合しています。コンパイルしてリンクしてください:

gcc -std=c99 -c -o test.c.o test.c 
g++ -std=c++0x -c -o test.cpp.o test.cpp 
g++ -o executable test.cpp.o test.c.o 
+1

g ++のコンパイル行に '='と '-c'を追加する必要があります。 – Erik

1

これはAndroid NDKと非常に関連しています。幸いにも、醜い回避策があります。 c++0xとしてc99としてコンパイルすべてのCファイル、およびすべてのCPPファイルを作成するには、ファイルをAndroid.mkに以下の行を追加します。

これは腕のlinux-androideabi-4.6ツールチェーンと最新のNDKのR8Bで動作
LOCAL_CPPFLAGS += -std=c++0x 
LOCAL_C99_FILES := $(filter %.c, $(LOCAL_SRC_FILES)) 
TARGET-process-src-files-tags += $(call add-src-files-target-cflags, $(LOCAL_C99_FILES), -std=c99) 

、将来のバージョンでは動作するとは保証できません。以前のバージョンではテストしませんでした。

14

誰がアンドロイドでこれを行うための最善の方法を疑問に思っているならば、それはこのです:

LOCAL_CFLAGS := -Werror 
LOCAL_CONLYFLAGS := -std=gnu99 
LOCAL_CPPFLAGS := -std=c++0x 
関連する問題