问题描述
我正在尝试设置我的 neovim C++ 开发环境,并且想使用 ccls
作为我的 coc 语言服务器。
当我使用 ccls
安装 Homebrew
时,它会安装 libffi
和 llvm
作为依赖项。
好像ccls
安装成功了,但是好像我需要配置PATH
变量,LDFLAGS
和CPPFLAGS
。
但我不知道 libffi
和 llvm
是做什么用的,它们建议使用不同的 LDFLAGS
和 CPPFLAGS
,这很令人困惑。
不导出任何变量来使用ccls
可以吗?或者,我应该在 ~/.zshrc
中导出哪个版本?
以下是我对 brew install ccls
的控制台输出。
❯ brew install ccls
==> Downloading https://homebrew.bintray.com/bottles/libffi-3.3.big_sur.bottle.tar.gz
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/llvm-11.0.0_1.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/c8e30903a9a4f695780e1eeeaa2cf4d5a95141a1cac98ab1bbc811817cde39ca?response-content-disposition=attachment%3Bfilename%3D
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/ccls-0.20201219.big_sur.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/934fb8fd594d6e7adbfa14b5608f1de14309db34f2cf61a0cb572bdc772b2aa3?response-content-disposition=attachment%3Bfilename%3D
######################################################################## 100.0%
==> Installing dependencies for ccls: libffi and llvm
==> Installing ccls dependency: libffi
==> Pouring libffi-3.3.big_sur.bottle.tar.gz
==> Caveats
libffi is keg-only,which means it was not symlinked into /usr/local,because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.
For compilers to find libffi you may need to set:
export LDFLAGS="-L/usr/local/opt/libffi/lib"
export CPPFLAGS="-I/usr/local/opt/libffi/include"
==> Summary
? /usr/local/Cellar/libffi/3.3: 17 files,540.2KB
==> Installing ccls dependency: llvm
==> Pouring llvm-11.0.0_1.big_sur.bottle.tar.gz
==> Caveats
To use the bundled libc++ please add the following LDFLAGS:
LDFLAGS="-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib"
llvm is keg-only,because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.
If you need to have llvm first in your PATH run:
echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.zshrc
For compilers to find llvm you may need to set:
export LDFLAGS="-L/usr/local/opt/llvm/lib"
export CPPFLAGS="-I/usr/local/opt/llvm/include"
==> Summary
? /usr/local/Cellar/llvm/11.0.0_1: 8,922 files,1.4GB
==> Installing ccls
==> Pouring ccls-0.20201219.big_sur.bottle.tar.gz
? /usr/local/Cellar/ccls/0.20201219: 5 files,1.5MB
==> Caveats
==> libffi
libffi is keg-only,because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.
For compilers to find libffi you may need to set:
export LDFLAGS="-L/usr/local/opt/libffi/lib"
export CPPFLAGS="-I/usr/local/opt/libffi/include"
==> llvm
To use the bundled libc++ please add the following LDFLAGS:
LDFLAGS="-L/usr/local/opt/llvm/lib -Wl,because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.
If you need to have llvm first in your PATH run:
echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.zshrc
For compilers to find llvm you may need to set:
export LDFLAGS="-L/usr/local/opt/llvm/lib"
export CPPFLAGS="-I/usr/local/opt/llvm/include"
解决方法
libffi
只是一个库。 llvm
是一个编译器基础架构。
libc++
是 LLVM 项目 的 C++ 标准库。您可以使用 LLVM 库或 GNU (libstdc++
) 库。这取决于您的软件项目(或您的个人偏好)您使用什么库。
由于 macOS 已经提供了 llvm
安装,您可以可选切换到由 brew 安装为依赖项的安装 - 这不是必需的。
LDFLAGS
环境变量确实包含由编译器(gcc/g++
或 clang/clang++
)传递给链接器的附加标志,即添加链接器可以找到库对象的路径然后,如果需要/使用,这些文件将链接到您的二进制文件。
和 CPPFLAGS
做同样的事情,但这次标志直接针对编译器,即为库的头文件添加额外的搜索路径。
在您的情况下,您不必从 .zshrc
导出任何(附加)变量,ccls
无需定义这些变量即可正常工作。