Linux源码安装gnutls
以下安装部署存在先后依赖,需要顺序安装
安装解压⼯具lzip,如果yum install或者apt-get install可直接安装lzip则跳过下⾯源码安装lzip
注:如果在后续的gnutls安装检查时缺少Libnettle或者hogweed缺少,表⽰nettle未安装正确,在nettle的相关⽂档中表明需要安装在share下,则重新安装nettle
./configure --prefix=/usr --disable-openssl --enable-shared --enable-mini-gmp
make && make install
问题解决
glib库是GTK+和GNOME⼯程的基础底层核⼼程序库,是⼀个综合⽤途的实⽤的轻量级的C程序库,它提供C语⾔的常⽤的数据结构的定义、相关的处理函数,有趣⽽实⽤的宏,可移植的封装和⼀些运⾏时机能,如事件循环、线程、动态调⽤、对象系统等的API。它能够在类UNIX的操作系统平台(如LINUX、HP-UNIX等)、WINDOWS、OS2和BeOS等操作系统台上运⾏。
本⽂将介绍在linux下源码安装glib库的过程,这过程很⿇烦,⼀点都不轻松,故记录下。
------
1、安装glib
我下载了个glib-2.48.,如果是.格式⽤tar -xvf解压,如果是.格式⽤tar -zxvf解压
解压后进⼊⽬录后,三部曲:
./configure
make
make install
看起来是简单,但第⼀步./configure问题多多,诸多问题请看下⾯各种解决法⼦。
2、zlib问题
报错如下:
configure: error: *** Working zlib library and headers not found ***
⾃glib-2.23开始就需要zlib,zlib是提供数据压缩⽤的函式库。
我下载了个zlib-1.2.,解压、进⽬录,三部曲:
./configure
make
make install
3、libffi问题
报错如下:
No package 'libffi' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables LIBFFI_CFLAGS
and LIBFFI_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
"FFI" 的全名是Foreign Function Interface,通常指的是允许以⼀种语⾔编写的代码调⽤另⼀种语⾔的代码。⽽libffi库只提供了最底层的、与架构相关的、完整的"FFI",在它之上必须有⼀层来负责管理两种语⾔之间参数的格式转换。
我下载了libffi-3.2.,解压、进⽬录,三部曲:
./configure
make
make install
4、pkg-config问题
报错如下:
configure: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config.
pkg-config能根据软件安装时软件的.pc配置⽂件路径到相应的头⽂件路径和库⽂件路径。
我下载了pkg-config-0.29.,解压、进⽬录,三部曲:
./configure
make
make install
如果第⼀步遇到如下错误:
configure: error: Either a previously installed pkg-config or "glib-2.0 >= 2.16" could not be found. Please set GLIB_CFLAGS and GLIB_LIBS to the correct values or pass --with-internal-glib to configure to use the bundled copy.
只需要:
./configure --with-internal-glib
5、pcre问题
报错如下:
configure: error: Package requirements (libpcre >= 8.13) were not met:
No package 'libpcre' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables PCRE_CFLAGS
and PCRE_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
PCRE(Perl Compatible Regular Expressions)是⼀个Perl库,包括perl兼容的正则表达式库。这些在执⾏正规表达式模式匹配时⽤与Perl 5同样的语法和语义是很有⽤的,也可以来解决C语⾔中使⽤正则表达式的问题。
我下载了pcre-8.,解压、进⽬录,改动的三部曲:
./configure --enable-utf8 --enable-unicode-properties
make
make install
如果第⼀步只是./configure,到时候安装glib会继续报错:
checking for Unicode support no
configure: error: *** The system-supplied PCRE does not support Unicode properties or UTF-8.
所以第⼀步是为了解决Unicode、UTF-8的⽀持,仅限于pcre7.9以上版本
*安装pcre如果报错如下:
configure: error: You need a C++ compiler for C++ support
那是你所⽤的linux没⽀持c++编译,只需要:
apt-get install build-essential
**当安装好pcre后,输⼊pcretest -C来打印pcre的安装情况,⼀般输出如下:
PCRE version 8.38 2015-11-23
Compiled with
8-bit support
UTF-8 support
Unicode properties support
No just-in-time compiler support
Newline sequence is LF
\R matches all Unicode newlines
Internal link size = 2
POSIX malloc threshold = 10
Parentheses nest limit = 250
Default match limit = 10000000
Default recursion depth limit = 10000000
Match recursion uses stack
⽽如果报错为:
pcretest: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
pcretest: error while loading shared libraries: libpcreposix.so.0: cannot open shared object file: No such file or directory
这种情况好像⼤多数linux都会发⽣,只需要⾃⼰建⽴⼀个软链接即可:
ln -s /usr/local/lib/libpcre.so.1 /lib
ln -s /usr/local/lib/libpcreposix.so.0 /lib
(如果之后还没⽤,可以考虑把/lib换/lib64)
6、glib使⽤⽅法
*如果都按照上⾯所列举的种种问题仔细折腾了后还有问题的话,请留⾔给我。(本⼈在Kali2、Kali Rolling、Ubuntu等都测试过了)
现在写⼀个简单的c语⾔代码,命名为hello.c
#include <glib.h>
int main(int argc, char** argv){
GList* list=NULL;
list=g_list_append(list,"Hello world!");
list=g_list_append(list,"made by pcat");
list=g_list_append(list,"pcatblogs");
printf("The first item is %s\n",g_list_first(list)->data);
return 0;
}
编译如下:
gcc $(pkg-config --cflags --libs glib-2.0) hello.c -o hello
./hello
如果在⼀些linux上报错:
undefined reference to `g_list_append'
undefined reference to `g_list_first'
那是因为有些gcc存在编译参数的顺序问题,$(pkg-config --cflags --libs glib-2.0)放在源⽂件的前⾯,⽽当编译器在源⽂件中遇到不能解析的函数时,在源⽂件之后的选项中寻相关的信息,那么就出现了编译错误,也就是⽆法到相关的函数定义。
所以只需要:
gcc hello.c -o hello $(pkg-config --cflags --libs glib-2.0)
gnu编译器
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论