18

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

fatal error: 'cstdint' file not found

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

4

1 に答える 1

18

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

クイックソリューション

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

#include <tr1/cstdint>

または

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

長くて退屈な説明

私はあなたがtr1ディレクトリなしでこれを行うことができることを覚えているので、いくつかの追加の読書をした後:

デフォルトで/usr/include/c++/4.2.1は、GNUGCCヘッダーであるからのC++ヘッダーを含めることになります。/usr/include/c++/4.2.1/tr1のようなTR1ヘッダーファイルが含まれますcstdint

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

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

于 2012-04-12T02:49:11.427 に答える