本文作者:kaifamei

configld是什么

更新时间:2023-04-04 03:59:25 人在看 0条评论

configld是什么

家用卫生间铝合金隔断效果图-打起精神来


2023年4月4日发(作者:写给朋友的一封信800字(精选15篇))

Linux命令pkg-config

⼀、编译和连接

⼀般来说,如果库的头⽂件不在/usr/include⽬录中,那么在编译的时候需要⽤-I参数指定其路径。由于同⼀个库在不同系统上可能位

于不同的⽬录下,⽤户安装库的时候也可以将库安装在不同的⽬录下,所以即使使⽤同⼀个库,由于库的路径的不同,造成了⽤-I参数指

定的头⽂件的路径也可能不同,其结果就是造成鱼怎么蒸 了编译命令界⾯的不统⼀。如果使⽤-L参数,也会造成连接界⾯的不统⼀。编译和连接界

⾯不统⼀会为库的使⽤带来⿇烦。

为了解决编译和连接界⾯不统⼀的问题,⼈们到了⼀些解决办法。其基本思想就是:事先把库的位置信息等保存起来,需要的时候再

通过特定的⼯具将其中有⽤的信息提取出来供编译和连接使⽤。这样,就可以做到编译和连接界⾯的⼀致性。其党建工作述职报告 中,⽬前最为常⽤的库信息

提取⼯具就是下⾯介绍的pkg-config。

pkg-config是通过库提供的⼀个.pc⽂件获得库的各种必要信息的,包括版本信息、编译和连接需要的参数等。这些信息可以通过pkg-

config提供的参数单独提取出来直接供编译器和连接器使⽤。

Thepkgconfigpackagecontainstoolsforpassingtheincludepathand/orlibrarypathstobuildtoolsduringthemakefileexecution.

pkg-configisafunctionthatreturnsmetainformationforthespecifiedlibrary.

ThedefaultsettingforPKG_COFIG_PATHis/usr/lib/addto

PKG_COFIG_PATHbyexpoatPKG_COFIG_PATHis

onlyneededwhencompilingpackages,notduringrun-time.

在默认情况下,每个⽀持pkg-config的库对应的.pc⽂件在安装后都位于安装⽬录中的lib/pkgconfig⽬录下。例如,我们在上⾯已经将

Glib安装在/opt/gtk⽬录下了,那么这个Glib库对应的.pc⽂件是/opt/gtk/lib/pkgconfig⽬录下⼀个叫的⽂件:

prefix=/opt/gtk/

exec_prefix=${prefix}

libdir=${exec_prefix}/lib

includedir=${prefix}/include

glib_genmarshal=glib-genmarshal

gobject_query=gobject-query

glib_mkenums=glib-mkenums

ame:GLib

Description:CUtilityLibrary

Version:2.12.13

Libs:-L${libdir}-lglib-2.0

Cflags:-I${includedir}/glib-2.0-I${libdir}/glib-2.0/include

使⽤pkg-config的--cflags参数可以给出在编译时所需要的选项,⽽--libs参数可以给出连接时的选项。例如,假设⼀个sample.c的程序⽤

到了Glib库,就可以这样编译:

$gcc-c`pkg-config--cflagsglib-2.0`sample.c

然后这样连接:

$gccsample.o-osample`pkg-config--libsglib-2.0`

或者上⾯两步也可以合并为以下⼀步:

$gccsample.c-osample`pkg-config--c世界杯介绍 flags--libsglib-2.0`

可以看到:由于使⽤了pkg-config⼯具来获得库的选项,所以不论库安装在什么⽬录下,都可以使⽤相同的编译和连接命令,带来了编译和

连接界⾯的统⼀。

使⽤pkg-config⼯具提取库的编译和连接参数有两个基本的前提:

1.库本⾝在安装的时候必须提供⼀个相应的.pc⽂件。不这样做的库说明不⽀持pkg-config⼯具的使⽤。

-config必须知道要到哪⾥去寻此.pc⽂件。

GTK+及其依赖库⽀持使⽤pkg-config⼯具,所以剩下的问题就是如何告诉pkg-config到哪⾥去寻库对应的.pc⽂件,这也是通过设置搜

索路径来解决的。

对于⽀持pkg-config⼯具的GTK+及其依赖库来说,库的头⽂件的搜索路径的设置变成了对.pc⽂件搜索路径的设置。.pc⽂件的搜索

路径是通过环境变量PKG_COFIG_PATH来设置的,pkg-config将按照设置路径的先后顺序进⾏搜索,直到到指定的.pc⽂件为⽌。

安装完Glib后,在bash中应该进⾏如下设置:

$exportPKG_COFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_COFIG_PATH

可以执⾏下⾯的命令检查是否/opt/gtk/lib/pkgconfig路径已经设置在PKG_COFIG_PATH环境变量中:

$echo$PKG_COFIG_PATH

这样设置之后,使⽤Glib库的其它程序或库在编译的时候pkg-config就知道⾸先要到/opt/gtk/lib/pkgconfig这个⽬录中去寻了

(GTK+和其它的依赖库的.pc⽂件也将拷贝到这⾥,也会⾸先到这⾥搜索它们对应的.pc⽂件)。之后,通过pkg-config就可以把其中库

的编译和连接参数提取出来供程序在编译和连接时使⽤。

另外还需要注意的是:环境变量的设置只对当前的终端窗⼝有效。如果到了没有进⾏上述设置的终端窗⼝中,pkg-config将不到新安装的

⽂件、从⽽可能使后⾯进⾏的安装(如Glib之后花香的诗句 的Atk的安装)⽆法进⾏。

在我们采⽤的安装⽅案中,由于是使⽤环境变量对GTK+及其依赖库进⾏的设置,所以当系统重新启动、或者新开⼀个终端窗⼝之后,

如果想使⽤新安装的GTK+库,需要如上⾯那样重新设置PKG_COFIG_PATH和LD_LIBRARY_PATH环境变量。

这种使⽤GTK+的⽅法,在使⽤之前多了⼀个对库进⾏设置的过程。虽然显得稍微繁琐了⼀些,但却是⼀种最安全的使⽤GTK+库的⽅式,

不会对系统上已经存在的使⽤了GTK+库的程序(⽐如GOME桌⾯)带来任何冲击。

为了使库的设置变得简单⼀些,可以把下⾯的这两句设置保存到⼀个⽂件中(⽐如set_gtk-2.10⽂件):

exportPKG_COFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_COFIG_PATH

exportLD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH

之后,就可以⽤下⾯的⽅法进⾏库的设置了(其中的source命令也可以⽤.代替):

$sourceset_gtk-2.10

只有在⽤新版的GTK+库开发应⽤程序、或者运⾏使⽤了新版GTK+库的程序的时候,才有必要进⾏上述设置。

如果想避免使⽤GTK+库之前上述设置的⿇烦,可以把上⾯两个环境变量的设置在系统的配置⽂件中(如/etc/profile)或者⾃⼰的⽤

户配置⽂件中(如~/.bash_profile);库的搜索路径也可以设置在/etc/⽂件中,等等。这种设置在系统启动时会⽣效,从⽽会导

致使⽤GTK+的程序使⽤新版的GTK+运⾏库,这有可能会带来⼀些问题。当然,如果你发现⽤新版的GTK+代替旧版没有什么问题的

话,使⽤这种设置⽅式是⽐较⽅便的。加⼊到~/.bashrc中,例如:

PKG_COFIG_PATH=/opt/gtk/lib/pkgconfig

重启之后:

[root@localhost~]#echo$PKG_COFIG_PATH

/opt/gtk/lib/pkgconfig

⼆、运⾏时

库⽂件在连接(静态库和共享库)和运⾏(仅限于使⽤共享库的程序)时被使⽤,其搜索路径是在系统中进⾏设置的。⼀般Linux系统

把/lib和/usr/lib两个⽬录作为默认的库搜索路径,所以使⽤这两个⽬录中的库时不需要进⾏设置搜索路径即可直接使⽤。对于处于默认库搜

索路径之外的库,需要将库的位置添加到库的搜索路径之中。设置库⽂件的搜索路径有下列两种⽅式,可任选其⼀使⽤:

1.在环境变量LD_LIBRARY_PATH中指明库的搜索路径。

2.在/etc/⽂件中添加库的搜索路径。

将⾃⼰可能存放库⽂件的路径都加⼊到/etc/中是明智的选择^_^

添加⽅法也极其简单,将库⽂件的绝对路径直接写进去就OK了,⼀⾏⼀个。例如:

/usr/X11R6/lib

/usr/local/lib

/opt/lib

需要注意的是:第⼆种搜索路径的设置⽅式对于程序连接时的库(包括共享库和静态库)的定位已经⾜够了,但是对于使⽤了共享库的

程序的执⾏还是不够的。这是因为为了加快程序执⾏时对共享库的定位速度,避免使⽤搜索路径查共享库的低效率,所以是直接读取库列

表⽂件/etc/从中进⾏搜索的。/etc/是⼀个⾮⽂本的数据⽂件,不能直接编辑,它是根据/etc/中设置的搜索

路径由/sbin/ldconfig命令将这些搜索路径下的共享库⽂件集中在⼀起⽽⽣成的(ldconfig命令要以root权限执⾏)。因此,为了保证程序

执⾏时对库的定位,在/etc/中进⾏了库搜索路径的设置之后,还必须要运⾏/sbin/ldconfig命令更新/etc/⽂件之后才

可以。ldconfig,简单的说,它的作⽤就是将/etc/列出的路径下的库⽂件缓存到/etc/以供使⽤。因此当安装完天空之城吉他谱 ⼀些库⽂

件,(例如刚安装好glib),或者修改增加新的库路径后,需要运⾏⼀下/sbin/ldconfig使所有的库⽂件都被缓存到中,如

果没做,即使库⽂件明明就在/usr/lib下的,也是不会被使⽤的,结果编译过程中抱错,缺少xxx库,去查看发现明明就在那放着,搞的想⼤

骂computer蠢猪⼀个。^_^

在程序连接时,对于库⽂件(静态库和共享库)的搜索路径,除了上⾯的设置⽅式之外,还可以通过-L参数显式指定。因为⽤-L设置

的路径将被优先搜索,所以在连接的时候通常都会以这种⽅式直接指定要连接的库的路径。

前⾯已经说明过了,库搜索路径的设置有两种⽅式:在环境变量LD_LIBRARY_PATH中设置以及在/etc/⽂件中设置。其

中,第⼆种设置⽅式需要root权限,以改变/etc/⽂件并执⾏/sbin/ldconfig命令。⽽且,当系统重新启动后,所有的基于GTK2的

程序在运⾏时都将使⽤新安装的GTK+库。不幸的是,由于GTK+版本的改变,这有时会给应⽤程序带来兼容性的问题,造成某些程序运⾏

不正常。为了避免出现上⾯的这些情况,在GTK+及其依赖库的安装过程中对于库的搜索路径的设置将采⽤第⼀种⽅式进⾏。这种设置⽅式

不需要root权限,设置也简单:

$exportLD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH

可以⽤下⾯的命令查看LD_LIBRAY_PATH的设置内容:

$echo$LD_LIBRARY_PATH

⾄此,库的两种设置就完成了。

参考:


文章投稿或转载声明

本文链接:https://www.en369.cn/fanwen/wenzhang/e745900a7af650d35fb7ba04f83466c1.html

来源:范文频道-369作文网版权所有,转载请保留出处。本站文章发布于 2023-04-04 03:59:25

发表评论

验证码:
用户名: 密码: 匿名发表
评论列表 (有 条评论
2人围观
参与讨论