【问题标题】:Error in using pkg-config with gcc in fish在 fish 中使用 pkg-config 和 gcc 时出错
【发布时间】:2013-10-07 06:58:12
【问题描述】:

我在 Fedora 19 上使用 fish shell。我试图编译 this 简单的 gtkmm 示例。

当我尝试在 fish 中使用以下命令编译它时:

g++ sample.cc -o sample `pkg-config gtkmm-3.0 --cflags --libs`

它显示以下错误:

g++: error: `pkg-config: No such file or directory
g++: error: gtkmm-3.0: No such file or directory
g++: error: unrecognized command line option ‘--cflags’
g++: error: unrecognized command line option ‘--libs`’

然而,当我将 bash 用于同一件事时,它可以正确编译。这意味着 pkg-config 确实获取了正确的标志。

我最近开始使用 fish,所以我不知道那里出了什么问题。有人可以帮我吗?

另外,这是我关于 stackoverflow 的第一个问题。大家好。

谢谢。

【问题讨论】:

  • 试试yum install pkgconfig
  • 我已经有了 pkg-config。并且代码在 bash 上编译,但不在 fish 上编译。
  • PATH 上的 fish 在这种情况下似乎坏了。
  • @devnull 我该如何解决?

标签: bash gcc fish pkg-config


【解决方案1】:

Fish shell 使用( ) 进行命令替换,而不是 Bash 使用的反引号。请参阅:The Fish tutorial。这就是为什么它对您不起作用的原因,它不太可能是您的 PATH 的问题。

我不太明白为什么,但由于某种原因,如果你只是用括号替换反引号,你会遇到 another 错误(其中... 是从pkg-config 输出的):

g++: error: unrecognized command line option '... '

您可以使用 fish 命令eval 来解决这个问题。所以:

eval g++ sample.cc -o sample (pkg-config gtkmm-3.0 --cflags --libs)

应该可以工作。

【讨论】:

    【解决方案2】:

    跟踪此行为存在问题: https://github.com/fish-shell/fish-shell/issues/982

    基本上,问题在于fish假定参数由换行符分隔,而pkg-config输出空格,可以在这里看到:

    $ echo "'"(pkg-config --cflags eigen3)"'"
    '-I/usr/include/eigen3 '
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多