前提・実現したいこと
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/
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/13 06:15