LLVM Web ページから Mac (OS X 10.8.4) に clang 3.3 (自作) をダウンロードしましたが、使用時に次のコンパイラ エラーが発生しますstd=c++11 stdlib=libc++
。
In file included from /usr/include/c++/v1/string:434:
In file included from /usr/include/c++/v1/algorithm:594:
In file included from /usr/include/c++/v1/memory:590:
In file included from /usr/include/c++/v1/typeinfo:61:
/usr/include/c++/v1/exception:146:5: error: an attribute list cannot appear here
_LIBCPP_NORETURN friend void rethrow_exception(exception_ptr);
^~~~~~~~~~~~~~~~
/usr/include/c++/v1/__config:190:28: note: expanded from macro '_LIBCPP_NORETURN'
# define _LIBCPP_NORETURN [[noreturn]]
^~~~~~~~~~~~
別のlibc ++も必要なようです(MACで100%完成したと言われていましたが...)が、見つかりません。どんな助けでも感謝します。参考までに:
> clang++ -v
clang version 3.3 (tags/RELEASE_33/final)
Target: x86_64-apple-darwin12.4.0
Thread model: posix
そして、はい、私はそれをグーグルで検索し、これを見つけました:http ://comments.gmane.org/gmane.comp.compilers.llvm.bugs/24138 libc++トランクで解決されたと主張しています???
わかりました、Howard が提案したように、トランクの先端の libc++ を /opt/local/share/libcxx にダウンロードしましたが、ビルドに問題があります。マニュアルにはcd libcxx/lib
、 、export TRIPLE=-apple-
、および run と書かれています./buildit
。これは、これが意味することだと思いますbash
(私は通常tcsh
ユーザーなので、 を移動し.tcshrc
、新しいシェルを取得して を開始しましたbash
)。私はそれを行い、コンパイルは機能しましたが、ライブラリのビルドは失敗しました。間違ったものを選択するため(81 行目ではなく、 が設定されていない場合に使用される 103 行目)、明らかに が./buildit
表示されません。の先頭にステートメントを追加すると、何も報告されません。どうして?ここで何が問題なのですか?$TRIPLE=-apple-
LDSHARED_FLAG
$TRIPLE
echo $TRIPLE
-apple-
echo TRIPLE = $TRIPLE
buildit
失敗は、間違ったものLDSHARED_FLAG
が選択されたため、ロードが機能しなかったことです ( Linux では意味があると思わld
れる不明なオプションについての苦情)。(ファイル)が環境変数を取得しなかった-soname
理由がわかりません(やなどの不要なものをいくつか取得しました)。そのファイルの先頭に追加するだけで、ライブラリが構築されました。ただし、ローダーはいくつかの警告を吐き出しましたが、そのすべてが次の形式でしたbuildit
#! /bin/sh
TRIPLE
CXX
CC
TRIPLE=-apple-
ld: 警告: ___cxa_bad_typeid で std::bad_typeid のグローバルな弱いシンボル typeinfo に直接アクセスすると、実行時に弱いシンボルをオーバーライドできないことを意味します。これは、異なる可視性設定でコンパイルされた異なる翻訳単位が原因である可能性があります。
しかし、最も重要なことは、それが機能することです (少なくともコンパイルは、まだライブラリをテストしていません)。最後に 1 つ質問があります。アドバイスは、このバージョンの所在を使用-I
し-L
てコンパイラに伝えることでした。いつもの場所に入れられません/usr/include/c++/v1/
か?とにかく、Xcodeにはそのバージョンが別の場所にあることに注意してください/usr/include/c++/v1/
。自作のclang 3.2を機能させるために、そのバージョンへのシンボリックリンク( )を入れました(Xcodeの更新後)。図書館はどうですか?標準的な場所にも置けますか?