安装了brew的fmt和gcc编译器后,为什么无法找到fmt库?

5
我正在使用MACOS Mojave版本10.14.3,并需要使用GNU编译器而非clang。我使用brew install gcc命令安装了gcc编译器。接着,我使用brew install fmt命令安装了fmt库。我在C++脚本顶部加入了#include <fmt/format.h>代码行。最后,我输入以下命令:
/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都能够被轻松找到。

我使用Eclipse IDE for C/C++ Developers进行开发。 版本: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

提前感谢您的帮助。

以下是关于IT技术的内容:


2
这不是GCC的问题,而是安装的问题。如果它没有安装在“标准”位置,您必须告诉g ++前端程序在哪里找到头文件和库文件。使用-I(大写i)选项指定头文件安装的位置,使用-L-l(小写L)选项指定任何链接器库。 - Some programmer dude
我猜那应该是 /usr/local/include 和 /usr/local/lib - Rup
考虑到/usr/local/Cellar的内容,我的猜测是您需要添加-I/usr/local/Cellar。由于我不知道brew在安装时如何组织其软件包,也许类似于-I/usr/local/Cellar/fmt/include?您可以在Eclipse项目设置中的某个地方添加目录(预处理器设置选项卡或类似选项),但通常不包括实际的-I选项。 - Some programmer dude
嗨,我是C++的新用户。您能告诉我我的g++命令行应该是什么样子吗? 在/usr/local/lib目录下,我有这个:lrwxr-xr-x 1 aaa admin 32 Feb 23 01:58 libfmt.a -> ../Cellar/fmt/5.3.0/lib/libfmt.a - ananvodo
1个回答

5

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,所有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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接