创建自定义 lightdm 迎宾程序
Create a custom lightdm greeter
我正在使用 conical 提供的 docs 创建自定义 LightDM-Greeter。问题是这些文档没有指定 lightdm 库的 linking 过程。
我是运行Arch Linux x86_64
。在使用 pkg-config --cflags --libs lightdm
进行查询时,我没有得到任何结果,具体来说 Package lightdm was not found in the pkg-config search path
。
那么,我是否需要构建 src 然后静态 link 到对象,或者有没有办法动态地 link 到 lightdm.so
.
我使用 pacman -S lightdm
安装了 lightdm。
也许pkg-config --libs --cflags liblightdm-gobject-1
?
你不需要 link 它(显示管理器程序),一旦它成为一个共享的可执行文件(这是你需要检查的)它就完全 linked .
要link将它作为共享可执行文件,您需要将 -shared
参数添加到编译器(这使其成为共享可执行文件)并包含所有 .o
文件在 link 时间。您还可以包括避免添加 C 运行time 的选项(但我认为这隐含在 --shared
选项中)因为它是在 运行 时间使用 dlopen( 3),您还应该指定 位置独立代码 ,并在每个 .o
文件的编译时使用选项 -fPIC
link在一起。最后一个选项生成可以在任何位置加载的目标代码,因为只有共享可执行文件才需要它,所以必须在编译时指定。因此,例如,如果您有 a.o
、b.o
作为欢迎程序的目标文件,则编译为:
cc -c -fPIC a.c b.c # compilation of a.c and b.c
cc --shared a.o b.o -o greeter.so # linking to greeter.so
应该够了。
欢迎程序通常作为正在使用的 XDM 显示管理器的共享库加载,以允许您在它们之间切换,而不会在只使用一个时将所有的 then 都放在内存中的负担过重。您通常会在配置中的某处指定在哪里以及如何找到共享对象 si,然后使用 dlopen(3) 函数加载和执行它。 (请参阅有关 xdm(8) 的文档)并加载它并执行函数。您会注意到,因为登录小部件会在登录时显示。
出于测试目的,我应该使用 xdm(8) 作为 x 显示管理器,因为它允许指定如何以及在何处找到 xdisplay greeter。 (对于程序员来说它有很好的文档记录)然后尝试在您喜欢的显示管理器上使用它。 (可能有一些变化)很可能,它们都是兼容的。
我正在使用 conical 提供的 docs 创建自定义 LightDM-Greeter。问题是这些文档没有指定 lightdm 库的 linking 过程。
我是运行Arch Linux x86_64
。在使用 pkg-config --cflags --libs lightdm
进行查询时,我没有得到任何结果,具体来说 Package lightdm was not found in the pkg-config search path
。
那么,我是否需要构建 src 然后静态 link 到对象,或者有没有办法动态地 link 到 lightdm.so
.
我使用 pacman -S lightdm
安装了 lightdm。
也许pkg-config --libs --cflags liblightdm-gobject-1
?
你不需要 link 它(显示管理器程序),一旦它成为一个共享的可执行文件(这是你需要检查的)它就完全 linked .
要link将它作为共享可执行文件,您需要将 -shared
参数添加到编译器(这使其成为共享可执行文件)并包含所有 .o
文件在 link 时间。您还可以包括避免添加 C 运行time 的选项(但我认为这隐含在 --shared
选项中)因为它是在 运行 时间使用 dlopen( 3),您还应该指定 位置独立代码 ,并在每个 .o
文件的编译时使用选项 -fPIC
link在一起。最后一个选项生成可以在任何位置加载的目标代码,因为只有共享可执行文件才需要它,所以必须在编译时指定。因此,例如,如果您有 a.o
、b.o
作为欢迎程序的目标文件,则编译为:
cc -c -fPIC a.c b.c # compilation of a.c and b.c
cc --shared a.o b.o -o greeter.so # linking to greeter.so
应该够了。
欢迎程序通常作为正在使用的 XDM 显示管理器的共享库加载,以允许您在它们之间切换,而不会在只使用一个时将所有的 then 都放在内存中的负担过重。您通常会在配置中的某处指定在哪里以及如何找到共享对象 si,然后使用 dlopen(3) 函数加载和执行它。 (请参阅有关 xdm(8) 的文档)并加载它并执行函数。您会注意到,因为登录小部件会在登录时显示。
出于测试目的,我应该使用 xdm(8) 作为 x 显示管理器,因为它允许指定如何以及在何处找到 xdisplay greeter。 (对于程序员来说它有很好的文档记录)然后尝试在您喜欢的显示管理器上使用它。 (可能有一些变化)很可能,它们都是兼容的。