web-dev-qa-db-ja.com

MacPortsgcc48で認識されないコマンドラインオプション '-stdlib = libc ++'

コンテキスト

科学分析ソフトウェア「root」とpythonパッケージ「numpy」」の間のリンクであるパッケージ「root_numpy」をコンパイルしようとしています。これはルートラッパー「rootpy」の一部として使用されます。 "。次の​​行を実行すると、g ++エラーが発生します。

g++ -bundle -undefined dynamic_lookup -g -Arch x86_64 -headerpad_max_install_names 
    -Arch x86_64 build/temp.macosx-10.6-x86_64-2.7/root_numpy/src/_librootnumpy.o 
    -o build/lib.macosx-10.6-x86_64-2.7/root_numpy/_librootnumpy.so 
    -L/Users/bwells/bin/root/lib -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d 
    -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread 
    -lpthread -Wl,-rpath,/Users/bwells/bin/root/lib -stdlib=libc++ -lm -ldl 
    -lTreePlayer
g++: error: unrecognized command line option '-stdlib=libc++'

フラグを付けて「helloworld」プログラムをコンパイルすると、同じ問題が発生します。

dhcp-130-112:helloworld bwells$ g++ -stdlib=libc++ helloworld.cpp 
g++: error: unrecognized command line option '-stdlib=libc++'

そのフラグがないと、正常にコンパイルされます。

dhcp-130-112:helloworld bwells$ g++ helloworld.cpp 
dhcp-130-112:helloworld bwells$ ls
a.out       helloworld.cpp

私のコンパイラのバージョンは次のとおりです。

dhcp-130-112:helloworld bwells$ g++ --version
g++ (MacPorts gcc48 4.8.2_2) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

別名Sudo port install gcc48を実行した結果。私のMacOSバージョンは10.9.3です。コードファイル「helloworld.cpp」は期待どおりです

dhcp-130-112:helloworld bwells$ cat helloworld.cpp 

#include <iostream>

int main(void)
{
    std::cout << "Hello world!" << std::endl;
    return 0;
}
dhcp-130-112:helloworld bwells$ 

質問:インターネットで収集できるすべてのものから、「-stdlib = ...」フラグはg ++の標準部分です。含めるとg ++エラーが発生するのはなぜですか?どうすればこれを修正できますか?

注:問題フラグなしでsetup.py行を手動で実行し、パッケージ全体をコンパイルできるようにすると、リンクエラーが発生します。結果のパッケージをPythonにインポートします。ここでのg ++​​の問題は、より大きな問題の症状であることが懸念されます。そのため、直接解決しようとしています。

11
user3777020

-stdlib=libc++はClang(GCCではない)オプションであり、GNU libstdc ++(GCCが使用するもの)ではなくLLVM libc ++標準ライブラリ(Clangが使用するもの)を使用するようにclangに指示します。

リンクエラーが発生したため、使用している他のパッケージがclangおよびlibc ++でコンパイルされている可能性があります。これは、GCCのlibstdc ++とABI互換ではありません(一部の低レベルのものを除く)。そのため、clangとlibc ++を使用してパッケージをコンパイルする必要があります。 AppleのXcodeにはclangが付属しており(これはおそらくこれに使用したいものです)、MacPortsは多くのclangディストリビューションも提供しています。

14
T.C.