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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

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

C++

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

LLVM

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

Clang

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

Q&A

解決済

1回答

1003閲覧

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

kinakomichi

総合スコア17

Linux

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

C++

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

LLVM

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

Clang

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

0グッド

0クリップ

投稿2018/07/18 06:12

編集2018/07/19 07:25

前提・実現したいこと

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/

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

投稿2018/08/09 11:05

yumetodo

総合スコア5850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kinakomichi

2018/09/13 06:15

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問