8

C と C++ のソースが混在するプロジェクトがあります。現在、OS X で GCC を使用してビルドされています。このプロジェクトには、gccコマンドを呼び出して C と C++ ソースの両方をコンパイルし、リンカーを個別に呼び出す特注のビルド スクリプトがあります。

私は今、Clangでビルドしようとしています。

呼び出すclangと、ソース ファイルが正しくコンパイルされます。.c.cppソース ファイルを区別し、それぞれの場合に適切な言語用にコンパイルします。ただし、リンク時に問題があります。リンカーが として呼び出されるclangと、C++ ランタイム ライブラリがリンクされず、シンボルが見つからないためにビルド エラーが発生します。

ビルド ツールとして設定すると正常にリンクできclang++ますが、コンパイル時にエラーと警告が発生します。C++コンパイラでCソースをコンパイルするのは本当に好きではありません。

clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
...
/usr/include/stdio.h:250:49: error: redefinition of parameter 'restrict'

ビルド スクリプトが compiler/linker として使用する単一のツールを指定するclang必要があるため、 の代わりに を単純に置き換える必要がありgccます。C++ ランタイム ライブラリとリンクするよう説得する方法はありclangますか?clang++

などのオプションは機能-stdlib=libc++しません。

4

1 に答える 1

12

gccの場合と同じように、clang -lc++または必要clang -lstdc++な実装に応じて、通常のリンカーフラグを使用できるはずです。(そして libc++ が必要です)

于 2012-10-17T16:43:34.347 に答える