2016-09-27 1 views
-1

これは愚かな質問かもしれませんが、私は100%確実ではないし、グーグルで良い答えを見つけることができないので、私はそれを尋ねるべきだと思った。C++ビルドでリンクされるCライブラリをコンパイルするC++標準を指定する必要はありますか?

私はC++コードにリンクされる新しいコンパイラでいくつかのCライブラリを構築しています。 gcc4.xからgcc5.xにコンパイラのバージョンを移動しているので、ライブラリを一からコンパイルしています。これは、私のC++ライブラリをすべて-std = gnu ++ 14で再コンパイルする必要があります。ターゲティング)。私の質問は、Cライブラリにコンパイルするときに-std = gnu ++ 14をCFLAG値に追加する必要がありますか?私はしませんと思う私は行うが、私は道の下で大きな問題に遭遇しないことを確認したい。

ありがとうございました。

+3

Cはアプリケーションバイナリインターフェイス(ABI) –

+0

を持っています。ここにいくつかの良い情報があります:https://isocpp.org/wiki/faq/mixing-c-and-cpp – yano

答えて

1

号は、あなたが使用しているC言語のバージョンを指定することができますが、C++言語のバージョンを指定することはできません。このような設定には意味をなさない効果がないため、C++言語のバージョンを指定するのは意味がありません。

+0

ありがとうございます - これは私が推測していたものですが、肯定が必要でした。 – user797963

0

C++コンパイラはシンボル名を変更するので、Cコードを囲むことをお勧めします。extern C {ブロック。共通のイディオムはそうです。あなたはCコンパイラでCコードをコンパイルしている

#ifdef __cplusplus 
extern "C" { 
#endif 

/* My C symbols, functions, etc */ 

#ifdef __cplusplus 
} 
#endif 
+0

これは本当に必要ですか?彼は* .cファイルのコードを作ることができますか? – Nick

+1

@Nick:ヘッダーとライブラリ(つまりオブジェクトファイル)の違いについてお読みください。 – Olaf

+2

@Nickそれは絶対に必要です*ファイル拡張子は本当に重要ではありませんが、gccはそれに基づいてコンパイルしようとしますが、あなたはそれを上書きすることができます。 –

関連する問題