库编译选项生成 pkg-config 以及运行时库查找路径

一般当我们安装了自定义库时,一般会有 lib/pkgconfig/xxx.pc 文件,该文件记录了编译链接需要的相关选项,我们以 gd 库为例。

[root@localhost lib]# ll /usr/local/gd-2.2.5/
total 0
drwxr-xr-x. 2 root root 198 Sep 12 11:56 bin
drwxr-xr-x. 2 root root 223 Sep 12 11:56 include
drwxr-xr-x. 3 root root 110 Sep 12 11:56 lib
[root@localhost gd-2.2.5]# cd /usr/local/gd-2.2.5/
[root@localhost gd-2.2.5]# cat lib/pkgconfig/gdlib.pc 
prefix=/usr/local/gd-2.2.5
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: gd
Description: GD graphics library
Version: 2.3.0-dev
Cflags: -I${includedir}
Libs.private: -lm   -lz    -lpng15    -lfreetype    -lfontconfig -lfreetype    -ljpeg    -lXpm -lX11     -lwebp @LIBICONV@
Libs: -L${libdir} -lgd

利用如下指令可以生成编译选项

[root@localhost gd-2.2.5]# pkg-config --libs lib/pkgconfig/gdlib.pc 
-L/usr/local/gd-2.2.5/lib -lgd  
[root@localhost gd-2.2.5]# pkg-config --cflags lib/pkgconfig/gdlib.pc 
-I/usr/local/gd-2.2.5/include

实际例子,比如我们要编译 main.c

gcc main.c `pkg-config --libs --cflags /usr/local/gd-2.2.5/lib/pkgconfig/gdlib.pc`

这时编译通过了,但是运行时报错找不到库,因为还要指定运行时库的查找路径,当然还有几种方法,比如复制到默认库超找路径,或者通过加入新路径到 /etc/ld.so.conf.d/ 路径下,或者临时通过环境变量 LD_LIBRARY_PATH 指定。

gcc main.c `pkg-config --libs --cflags /usr/local/gd-2.2.5/lib/pkgconfig/gdlib.pc` -Wl,-rpath=/usr/local/gd-2.2.5/lib



上一篇: linux 命令openssl、gpg
下一篇: cmake 使用例子
作者邮箱: 203328517@qq.com