web-dev-qa-db-ja.com

Clang OS X Lion、cstdintが見つかりません

Cstdintを利用するアプリケーションをコンパイルしようとしています。 Appleはgccを非推奨にしたので、clangでコンパイルしてみたかったのですが、エラーが発生します:

fatal error: 'cstdint' file not found

Gcc4.6.2バージョンにはライブラリを含めるための-std=c++0xのオプションがあることは知っていますが、os xバージョンは4.2なので、ここではあまりオプションではありません。私が前進する方法について何か提案はありますか? 4.6.2をインストールしようとしましたが、gccをビルドする前に必要なライブラリのいくつかをコンパイルするときにさまざまな問題が発生しました。

18
agmcleod

おそらく、このアプリケーションのソースコードがあるので、Clang 3.0(Lionのツールに付属)にヘッダーがあるので、ヘッダーを変更して正しいcstdintヘッダーを含めることができます。

クイックソリューション

ヘッダーはtr1ディレクトリの下にあるため、次のいずれかを実行する必要があります。

#include <tr1/cstdint>

または

#include <stdint.h> // which will use the C99 header

長くて退屈な説明

私が覚えているので、いくつかの追加の読み取りを行った後、tr1ディレクトリなしでこれを行うことができます:

デフォルトでは、/usr/include/c++/4.2.1のC++ヘッダーをインクルードします。これはGNU GCCヘッダーです。/usr/include/c++/4.2.1/tr1にはcstdint

別の方法は、Clang ++フロントエンドを使用してコンパイルし、-stdlib=libc++フラグを渡すことです。これにより、ClangのC++ヘッダー実装である/usr/include/c++/v1のヘッダーが使用されます。 cstdintがあります。

例:

// file called example.cxx
#include <tr1/cstdint>

int main() {
    // whatever...
}

これをコンパイルします:

g++ example.cxx

または

clang++ example.cxx

そしてそれはあなたが望むことをするでしょう。

tr1バージョンを使用したくない場合(正確ではないにしても、ほぼ同じです):

// file called example.cxx
#include <cstdint>

int main() {
    // stuff
}

これは次のようにコンパイルされます。

clang++ -stdlib=libc++ example.cxx

-stdlib=libc++を使用する場合でも、GCCのlibc++ではなく、ClangのC++ライブラリlibstdc++にリンクしていることを意味します。

18
wkl