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++
しません。