【问题标题】:What does this one line of gcc code means?这一行gcc代码是什么意思?
【发布时间】:2021-08-04 08:27:13
【问题描述】:

gcc -framework IOKit -framework ApplicationServices -framework CoreDisplay -F /System/Library/PrivateFrameworks -framework DisplayServices -Wl,-U,_DisplayServicesSetBrightness main.c -o prg3

你能解释一下这里发生了什么吗?

我还要补充一点:我的 main.c 中有这行代码。

    extern int DisplayServicesSetBrightness(CGDirectDisplayID id,
                                    float brightness)
                                     __attribute__((weak_import));

我不熟悉 C 和编译它等等,所以详细的解释会很有帮助。 谢谢。

【问题讨论】:

  • 这个指向gcc options guidance 的链接是您需要阅读/理解的网页之一,因为它涵盖了gcc 编译器的可用选项

标签: c macos gcc frameworks


【解决方案1】:

这段代码没有任何事情。它只是声明一个外部函数。

它向编译器解释说,如果需要,它可以恢复为名为 DisplayServicesSetBrightness 的外部函数(可能在库中),该函数采用两个参数(显示 ID 和亮度)。

__attribute__((weakimport)) 部分告诉链接器只有在没有找到同名“更好”(即非弱)的任何东西时才应该使用(调用)这个外部函数。

【讨论】:

  • 这不是问题要问的部分。
  • 谢谢,但是是的,这与问题无关。问题是关于以 gcc 开头的行。
【解决方案2】:

将命令的各个部分一一提取:

gcc

在 macOS 中,这实际上会调用 clang,除非您安装了另一个编译器。

-framework IOKit

这表示在编译和链接中包含 IOKit 框架的部分(例如头文件和库)。

-framework ApplicationServices

这表示要包括 ApplicationServices 框架的部分。

-framework CoreDisplay

这表示包含 CoreDisplay 框架的部分。

-F /System/Library/PrivateFrameworks

这表示要在/System/Library/PrivateFrameworks 中搜索框架以及默认路径。

-framework DisplayServices

这表示要包括 DisplayServices 框架的部分。

-Wl,-U,_DisplayServicesSetBrightness

这表示将-U _DisplayServicesSetBrightness 传递给链接器。这告诉链接器如果没有定义_DisplayServicesSetBrightness 是可以的。通常,如果未定义引用的符号,链接器会报告错误。使用-U,它将用零替换符号。

链接器看到的符号_DisplayServicesSetBrightness 在C 源代码中是DisplayServicesSetBrightness。在 macOS 系统(和其他一些系统)上,编译器会自动为下划线添加前缀。

main.c

这表示编译main.c,并且由于没有给出相反的开关,将编译结果链接到可执行文件中。

-o prg3

这表示将输出放在一个名为 prg3 的文件中。

【讨论】:

  • 谢谢,这正是我所需要的。您能否为此添加一些额外的资源?为了了解更多关于这些的信息,我应该搜索什么?
猜你喜欢
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多