这一行gcc代码是什么意思?

What does this one line of gcc code means?

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 和编译它等,所以详细的解释会很有帮助。 谢谢

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

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

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

将命令的各个部分一一列举:

gcc

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

-framework IOKit

这表示在编译和 linking 中包含 IOKit 框架的部分(例如 headers 和库)。

-framework ApplicationServices

这表示要包含 ApplicationServices 框架的各个部分。

-framework CoreDisplay

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

-F /System/Library/PrivateFrameworks

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

-framework DisplayServices

这表示要包含 DisplayServices 框架的各个部分。

-Wl,-U,_DisplayServicesSetBrightness

这表示要将 -U _DisplayServicesSetBrightness 传递给 linker。这告诉 linker 如果没有定义 _DisplayServicesSetBrightness 也没关系。通常,如果未定义引用的符号,linker 会报告错误。使用 -U,它将用零替换符号。

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

main.c

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

-o prg3

这表示将输出放入名为 prg3.

的文件中