这一行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
.
的文件中
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
.