c++ - 为什么用 brew 安装 fmt 和 gcc 编译器后找不到 fmt 库?

标签 c++ macos gcc homebrew fmt

我使用的是 MACOS Mojave 版本 10.14.3,需要使用 GNU 编译器而不是 clang。

我使用 brew install gcc 安装了 gcc 编译器. 然后我使用 brew install fmt 安装了 fmt 库.

我把 #include <fmt/format.h>在我的 C++ 脚本的顶部

然后我输入:

/usr/local/bin/g++-8 -O0 -g3 -Wall -c -fmessage-length=0 -std=c++17 -MMD -MP -MF"src/trail2.d" -MT"src/trail2.o" -o "src/trail2.o" "../src/trail2.cpp"

但是我得到这个错误:

fatal error: fmt/format.h: No such file or directory

当我尝试使用 boost 库时也会发生同样的情况。

我用clang的时候发现fmt和boost没有问题。

以防万一我使用面向 C/C++ 开发人员的 Eclipse IDE。版本:2018-12 (4.10.0)。

具体来说,如何让 fmt 库与我用 brew 安装的 gcc 一起工作?

我在我的 Mac 中的/usr/local/Cellar 是:

drwxr-xr-x   3 aaa  staff    96 Feb 22 22:07 gcc
drwxr-xr-x   3 aaa  staff    96 Feb 23 01:58 fmt

我在我的 Mac 中的/usr/local/Cellar 是:

    lrwxr-xr-x    1 aaa  admin        29 Feb 22 22:07 c++-8 -> ../Cellar/gcc/8.2.0/bin/c++-8
    lrwxr-xr-x    1 aaa  admin        29 Feb 22 22:07 cpp-8 -> ../Cellar/gcc/8.2.0/bin/cpp-8
    lrwxr-xr-x    1 aaa  admin        29 Feb 22 22:07 g++-8 -> ../Cellar/gcc/8.2.0/bin/g++-8
    lrwxr-xr-x    1 aaa  admin        29 Feb 22 22:07 gcc-8 -> ../Cellar/gcc/8.2.0/bin/gcc-8

感谢高级的帮助

最佳答案

homebrew 的工作方式是将所有内容都放入

/usr/local/Cellar/PACKAGE-NAME/PACKAGE-VERSION

然后它为 /usr/local/bin 中的二进制文件创建链接,例如

/usr/local/bin/grep -> /usr/local/Cellar/grep/4.17/bin/grep

所以你只需要将 /usr/local/bin 放在你的 PATH 中,所有 homebrew 程序都可以按名称运行,例如grep 在上面的例子中。


它对编译做同样的事情,它将实际的头文件和库放在:

/usr/local/Cellar/PACKAGE-NAME/PACKAGE-VERSION/include
/usr/local/Cellar/PACKAGE-NAME/PACKAGE-VERSION/lib

并且还创建链接到那些在

/usr/local/include
/usr/local/lib

因此,您的 gcc 命令将是:

g++-8 -I /usr/local/include -L /usr/local/lib -lfmt <PROGRAM.CPP> -o <PROGRAM>

您可以查看哪些文件属于您的 fmt 包以及它们所在的位置:

brew ls fmt --verbose

如果安装 pkg-config,使用:

brew install pkg-config

它将使用文件 fmt.pc 并在您键入时告诉您正确的编译开关:

pkg-config --libs --cflags fmt

示例输出

-I/usr/local/Cellar/fmt/5.3.0/include -L/usr/local/Cellar/fmt/5.3.0/lib -lfmt

这意味着您可以将 gcc 命令简化为:

g++-8 $(pkg-config --libs --cflags fmt) <PROGRAM.CPP> -o <PROGRAM>

关于c++ - 为什么用 brew 安装 fmt 和 gcc 编译器后找不到 fmt 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54839414/

相关文章:

c++ - 在 OS X 上使用 imshow 时出错

macos - 使用 CICrop 裁剪 CIImage 无法正常工作

c - 为什么我在 Windows 机器上用 C 开发时会出现 include <windows.h> 错误?

linux - QT Creator交叉编译配置

c++ - MSVC 2017 下缺少 C11 strerrorlen_s 函数

c++ - boost::asio::buffer:获取缓冲区大小并防止缓冲区溢出?

c# - 您如何标记代码以便您稍后可以回来处理它?

c++ - 更好的 std::find 指针集合并将取消引用的值与 const 引用值进行比较

python - 执行 arch -i386 pip2 install skype4py 时可执行文件中的 CPU 类型错误

c++ - [[gnu::pure]] 函数属性和线程的优化问题