2016-07-18 31 views
1

私はソースから何かを構築しています。私のシステムのgccとstdlibC++は古すぎますが、使用できるclangビルドがあります。デフォルトでは、clangはstdlibC++を使用しますが、clangが使用するためにlibC++をインストールすることもできます。libC++がインストールされているかどうかを確認する方法は?

libC++にclangがインストールされているかどうかを確認する最も良い方法は何ですか?

+0

エラーは何ですか? –

+1

どのようなシステムですか?さまざまなリヌースで、あなたが持っているパッケージマネージャ(apt、yum、rpm ...)のためにパッケージマネージャのクエリスイッチを使います。マニュアルページまたは--helpを使用してください。 – CarlH

+0

C++を使用するには、コマンドとして明示的に 'clang ++ 'を使用する必要があります。 –

答えて

3

わずかに良い答え#define _LIBCPP_VERSION 3700は、その後、あなたは++ libcを持っています。

+0

この1つのライナーが好ましい。少なくとも私のシステムでは、コマンド全体を再入力せずにn.m.のアプローチを変更することはできませんでした。 と-E -dMのようなシンボルのいくつかについて説明できますか?また、たくさんのclangビルドバージョンを持つ自明でないシステムでも、これを追加したいと思います。 "clang"をpath/to /特定のclang-build/bin/clangに置き換えることができます。 – okovko

+1

'#include 'については、http://stackoverflow.com/questions/31657499/how-to-detect-stdlib-libc-in-the-preprocessorを参照してください(別の回答には十分面白いです'clang ++ -E -dM'はclangにソースをコンパイルしないように指示しますが、' -E'を前処理して定義されているすべてのもの( '-dM')を出力するだけです –

-1

gccとclangの両方が混乱する可能性があります。コードをC++としてコンパイルするには、clangの代わりにgccの代わりにg++、それぞれclang++を使用する必要があります。

ほとんどのプログラムがそれらに依存しているので、私はlibc++ライブラリ自体が欠けているとは思っていません。

+0

さて、それはコンパイラ自体を設定することです。 cmakeはclang ++の代わりにclangを内部的に呼び出すかもしれませんが、コンパイラを設定するための変数が必要だと思います。(自分自身には1つあります) –

+0

ライブラリがないと驚いています。指示がある場合、Gccはそのライブラリにリンクすることができます。 –

+0

...コメントを削除し、downvotingは完全に無礼です! Lol –

2

は、ここでライブラリがインストールされているかどうかを確認する方法は次のとおりです。端子に

タイプldconfig -p | grep libc++。どのシステムを使用しているかは関係ありません。 libC++がインストールされていない場合、端末は何も言わないでしょう。インストールされている場合は、使用可能なバージョンが表示されます。

+0

@okovkoこれをチェックしてください。システムにソフトウェアをインストールする方法を説明します。それを試してみてください。 https://ask.fedoraproject.org/en/question/7863/how-do-i-search-for-and-install-software-packages-in-fedora/それ以降、このディスカッションは廃止されたため削除できます。 –

+0

新鮮なものをインストールするだけでいいですが、それは私のシステムではないので、問題はありません。 – okovko

+0

@okovkoあなたがそれを使うことができる場合に備えて、それは便利です。このディスカッションを廃止された時点で削除しましょう。 –

4

のlibC++がインストールされているかどうかを確認する最も簡単な方法は、些細なプログラムでそれを使用することです:

clang++ -xc++ -stdlib=libc++ - <<EOF 
int main(){} 
EOF 

これが失敗した場合は、libcの++を持っていません。実際のアプリケーションで

、ユーザーが提供するコンパイラとリンカオプションを追加します。

clang++ $(CXXFLAGS) $(LDFLAGS) -xc++ -stdlib=libc++ - <<EOF 

ユーザーはlibcの++は、非標準の場所にインストールされていることを指定する機会を持つように。それは何か印刷した場合

printf "#include <ciso646>\nint main() {}" | clang -E -stdlib=libc++ -x c++ -dM - | grep _LIBCPP_VERSION

:N、N- @より

+0

[libC++ docs](http://libcxx.llvm.org/docs/UsingLibcxx。html)は、$(CXXFLAGS)と$(LDFLAGS)が実用的なアプリケーションになることの詳細を提供します。 – okovko

関連する問題