質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • Linux

    4053questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • C++

    3790questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Clang

    14questions

    Clangは、プログラミング言語 C、C++、Objective-C、Objective-C++ 向けのコンパイラである。

  • LLVM

    6questions

    LLVM とは、コンパイル時や実行時に様々な最適化をするコンパイラ基盤です。 任意のプログラミング言語に対応可能で、LLVM自体はC++で実装されています。

llvmとclangを/usr/local下にインストールしたけどいろいろ困ってます。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 538

kinakomichi

score 11

 前提・実現したいこと

llvmの公式からllvm6.0.1のソースコードを引っ張ってきてインストールしました。clang、libc++、libc++abiも必要なんので入れました。lldは要らないけどなんとなくで入れました。

 発生している問題・エラーメッセージ

  • clang++のデフォルトのインクルードパスが先住の
    /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../include/c++/4.8
    /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../include/c++/4.8/x86_64-suse-linux
    /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../include/c++/4.8/backward
    になってしまってます。本当のインクルードパスに指定したい/usr/local/include/c++/v1はちゃんとあります。
  • デフォルトで使用するC++の標準ライブラリをlibc++にしたいのだけど、libstdc++になってます。
  • 呼び出すリンカをlldにしたいのですが、やっぱり先住のldになってます。

-vオプション付きでclang++実行してみた結果がこれです。

$ clang++ -v hello.cpp -o hello
clang version 6.0.1 (tags/RELEASE_601/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin
Found candidate GCC installation: /usr/lib64/gcc/x86_64-suse-linux/4.8
Selected GCC installation: /usr/lib64/gcc/x86_64-suse-linux/4.8
Candidate multilib: .;@m64
Selected multilib: .;@m64
 "/usr/local/bin/clang-6.0" -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name hello.cpp -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -v -resource-dir /usr/local/lib/clang/6.0.1 -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../include/c++/4.8 -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../include/c++/4.8/x86_64-suse-linux -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../include/c++/4.8/backward -internal-isystem /usr/local/include -internal-isystem /usr/local/lib/clang/6.0.1/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /home/darnisee/prac_cpp -ferror-limit 19 -fmessage-length 146 -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/hello-fb0ff3.o -x c++ hello.cpp
clang -cc1 version 6.0.1 based upon LLVM 6.0.1 default target x86_64-unknown-linux-gnu
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../include/c++/4.8
 /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../include/c++/4.8/x86_64-suse-linux
 /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../include/c++/4.8/backward
 /usr/local/include
 /usr/local/lib/clang/6.0.1/include
 /usr/include
End of search list.
 "/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld" -z relro --hash-style=gnu --hash-style=both --enable-new-dtags --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o hello /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../lib64/crt1.o /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../lib64/crti.o /usr/lib64/gcc/x86_64-suse-linux/4.8/crtbegin.o -L/usr/lib64/gcc/x86_64-suse-linux/4.8 -L/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../lib64 -L/usr/local/bin/../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/lib -L/usr/lib64/gcc/x86_64-suse-linux/4.8/../../.. -L/usr/local/bin/../lib -L/lib -L/usr/lib /tmp/hello-fb0ff3.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib64/gcc/x86_64-suse-linux/4.8/crtend.o /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../lib64/crtn.o


Found candidate GCC installation:
Selected GCC installation: 
あたりがなんとなく怪しい気がしてるけどやっぱりよくわからないです。

 試したこと

  • -stdlib=libc++した時はちゃんとlibc++とリンクしてくれます。
$ clang++ -stdlib=libc++ -o hello hello.cpp
$ ldd hello
        linux-vdso.so.1 (0x00007ffd8f54a000)
        libc++.so.1 => /usr/local/lib/libc++.so.1 (0x00007fd237599000)
        libc++abi.so.1 => /usr/local/lib/libc++abi.so.1 (0x00007fd237565000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fd23718a000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd236f73000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fd236bce000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd2369b1000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fd2367a9000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fd237487000)
  • 最初から付いてたパッケージ管理ツールで別バージョンのgccをインストールしたら、clangの動きが変わりました。
$ clang++ -v -o hello hello.cpp
(略)
Found candidate GCC installation: /usr/lib64/gcc/x86_64-suse-linux/4.8
Found candidate GCC installation: /usr/lib64/gcc/x86_64-suse-linux/5
Selected GCC installation: /usr/lib64/gcc/x86_64-suse-linux/5
(略)
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib64/gcc/x86_64-suse-linux/5/../../../../include/c++/5
 /usr/lib64/gcc/x86_64-suse-linux/5/../../../../include/c++/5/x86_64-suse-linux
 /usr/lib64/gcc/x86_64-suse-linux/5/../../../../include/c++/5/backward
 /usr/local/include
 /usr/local/lib/clang/6.0.1/include
 /usr/include
End of search list.
(略)
  • まさかと思ってやってみたけどダメでした。惜しくはない?
$ sudo  ln -s /usr/local/lib/clang/6.0.1/ /usr/lib64/gcc/x86_64-suse-linux/
$ clang++ -v -o hello hello.cpp
(略)
Found candidate GCC installation: /usr/lib64/gcc/x86_64-suse-linux/4.8
Found candidate GCC installation: /usr/lib64/gcc/x86_64-suse-linux/5
Found candidate GCC installation: /usr/lib64/gcc/x86_64-suse-linux/6.0.1
Selected GCC installation: /usr/lib64/gcc/x86_64-suse-linux/5
(略)

 補足情報(FW/ツールのバージョンなど)

インストールに使ったもの

  • cmake (3.5.2)
  • Ninja (1.7.2)
  • gold (1.14)
  • clang (7.0.0) アンインストール済

cmakeした時のコマンド

cmake -G "Ninja" -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Release -DLLVM_USE_LINKER=gold CMAKE_INSTALL_PREFIX=/usr/local ../llvm-6.0.1.src/
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

clangのinclude pathはソースコード埋め込みの決め撃ちなので・・・

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/09/13 15:15

    うーん。。。やっぱり諦めておぷしょん付けるしかないのかな

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Linux

    4053questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • C++

    3790questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Clang

    14questions

    Clangは、プログラミング言語 C、C++、Objective-C、Objective-C++ 向けのコンパイラである。

  • LLVM

    6questions

    LLVM とは、コンパイル時や実行時に様々な最適化をするコンパイラ基盤です。 任意のプログラミング言語に対応可能で、LLVM自体はC++で実装されています。