【问题标题】:Why is gcc interpreting this as single option only?为什么 gcc 仅将其解释为单个选项?
【发布时间】:2017-09-30 14:23:20
【问题描述】:

我正在尝试在 PowerShell 上编译一个 gtk 程序,以便可以使用 pkg-config 的输出作为 gcc 的输入,但 gcc 将整个输出作为单个命令行选项并返回错误:

gcc.exe:错误:无法识别的命令行选项 '-mms-bitfields -pthread -mms-bitfields -IC:/gtk/include/gtk-3.0 -IC tk/include/cairo -IC:/gtk/include -IC:/gtk/include/pango-1.0 -IC:/gtk/include/ atk-1.0 -IC:/gtk/include/cairo -IC:/gtk include/pixman-1 -IC:/gtk/include -IC:/msys/opt/include -IC:/msys/opt/include/freetype2 - IC:/msys/opt/include -IC:/msys t/include/libpng16 -IC:/gtk/include -IC:/gtk/include/freetype2 -IC:/gtk/include -IC:/gtk/include/libpng16 -IC:/gtk/in de/gdk-pixbuf-2.0 -IC:/gtk/include/libpng16 -IC:/gtk/include/glib-2.0 -IC:/gtk/lib/glib-2.0/include -LC: /gtk/lib -lgt -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32 -lz -lpangowin32-1.0 -lp ocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl'

我正在使用的命令行:

gcc hello.c -o hello $(pkg-config.exe --cflags --libs gtk+-3.0)

我也试过了:

$(gcc hello.c -o hello $(pkg-config.exe --cflags --libs gtk+-3.0))

返回相同的结果。我该如何解决这个问题?

【问题讨论】:

  • gcc hello.c -o hello '--%' $(pkg-config.exe --cflags --libs gtk+-3.0)
  • 工作得很好,谢谢。您可以将其发布为答案,以便我接受。

标签: powershell gcc windows-10 pkg-config


【解决方案1】:

似乎pkg-config.exe --cflags --libs gtk+-3.0 命令将其输出作为单行返回,因此在 PowerShell 中它被解析为单个 string 对象。当 string 带有空格(实际规则更复杂且取决于版本)传递给本机应用程序时,PowerShell 会尝试提供帮助并添加引号,因此它被解释为单个参数。防止它的一种方法是使用'--%'“operator”:

gcc hello.c -o hello '--%' $(pkg-config.exe --cflags --libs gtk+-3.0)

请注意,它实际上不是--% 运算符,因此它不会使该行的其余部分按字面意思解释。实际上它只是一个值为--%的字符串。

之所以会发生“魔术”,是因为当本机应用程序的 PowerShell 命令行构建器遇到 --% 字符串时,它会禁用对任何剩余参数的带有空格的参数的自动引用。它还通过[Environment]::ExpandEnvironmentVariables 传递它们以解析%VariableName% 形式的环境变量。

【讨论】:

  • 谢谢。在windoze上构建gtk应用程序是一个巨大的痛苦。此外,Win7 只需要这种类型的修复(或痛苦地转换为 [string[]]),而 Win10 将使用 pkg-config 没有问题。下次我在窗户上时,这将节省很多悲伤......
猜你喜欢
  • 2019-03-08
  • 2017-08-01
  • 1970-01-01
  • 2015-06-14
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多