ubuntu完整安装glib心得

学习完数据结构,感觉对数据的存储有了一种新的认识,在动态内存的基础上,链表有了绝对的灵活性,可以给未知长度的数据处理带来方便,但是在不停的写代码的过程中,感觉到了深深的仇恨,每次要实现功能,几乎源代码都有改动,也就是说每个使用链表的方法几乎都不一样,这就对自己编写的链表、队列、和栈的函数维护成本增加,甚至N天以后不知道每个版本的实际差别。

这是我就在想是不是linux能够提供现成的链表实现呢,毕竟在内核中大量的实现链表的神乎其神的源代码,会不会好心的封装成库给其他人使用呢?很可惜linux没有做,所以基本上要使用链表以及队列都需要自己去实现源码,对于我这样一个懒癌重度患者这是不能忍受的,我就在网上找相关的资料,终于让我发现了第三方glib库。这个库的功能很强大,从小的g_uint8类型的定义,到g_thread线程的实现,这个库都可做到,下面简单介绍一下,完整的功能说明自己去百度吧。

glib介绍

glib库是Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性。

1 类型定义

整数类型. 布尔类型. 字符型. 浮点型.
指针. gconstpointer对于于标准C的const void*

2 glib宏

常用宏

整型与指针类型间的转换

调试宏

前提条件检查,断言, 判断构建是否是指定的构件

3 常用函数

4 内存管理

4 字符串处理

字符串操作, 修改字符串, 字符串转换, 其他字符串转换函数

5 数据结构

链表, 树, 哈希表,

6 GString

GString类似于标准C的字符串类型,但是GString能够自动增长,这些特性可以防止程序中的缓冲区溢出。下面是GString的定义:

7.计时器函数

8 错误处理函数

9 其它实用函数

基本上能够用的上的功能这个库都有实现

好了下面进入正题,一起来对hello world进行编译。

首先介绍开发环境

PC:XP sp3,深度完美 纯净标准版

虚拟机: VMware? Workstation,版本:9.0.2 build-1031769

ubuntu:华清远见   开学版 12.04

今天的目标是把程序员的标准入门程序编译通过,也就是程序员连撩妹都会首先使用的“hello world”,功能就是使用g_printf函数打印。

源代码如下:

#include <stdio.h>

#include "glib.h"

int main(int agrc, char **argv)

{

g_printf("Hello world!\n");

return 0;

}

今天的目标就是把这个程序编译通过并运行。

首先上来就是啥也不管,先写好代码,gcc再说,万一通过了呢,这种事情发生已经见怪不怪了。

[email protected]:~/16021$ gcc hello.c

hello.c:3:18: fatal error: glib.h: No such file or directory

compilation terminated.

很不幸,报错说没有头文件glib.h,但是也不意外,因为glib是第三方的库,如果没有安装是不会有库文件的。

下面有目标的了,安装第三方库文件glib,首先下载glib源码,因为apt中没有找到直接的安装,我下载的是glib-2.0.6.tar.gz,其他版本没有试验,查到资料说glib有个依赖libffi-3.2.1.tar.gz这个库,下载,想办法弄到ubuntu里面去,然后tar解压

需要先安装libffi-3.2.1.tar.gz库

解压

[email protected]:~/16021$ tar -xzvf libffi-3.2.1.tar.gz

进入libffi-3.2.1文件夹,进行经典三部曲./configure   make   make install

我为了防止权限不足的以外,这三步都加了sudo权限

这个库安装的很快,之后同样动作对待glib-2.0.6.tar.gz。

正常应该不会出现错误,这就基本上成功了一半。

这是就可以在/usr/local/lib和/usr/local/include文件夹中找到glib2.0的代码,这时候再来编译下试试。

居然还说我没有头文件?原来是我们使用的头文件用了<>,会在环境变量设置的头文件目录查找头文件,目录是/usr/include 目录

,好了,知道了原因就好解决了,正常应该是在make中加入glib的头文件路径,但是我比较懒,而且现在也不太实用makefile,决定把头文件全部拷贝到/usr/include目录中,这种操作是不被推荐的,但是确实可以解决这个问题。

makefile的方法我还没有研究。下面讲解一下复制文件的操作。

[email protected]:~/16021$ sudo cp -r /usr/local/include/glib-2.0/* /usr/include/

好了,现在编译一下。

[email protected]:~/16021$ gcc hello.c

In file included from /usr/include/glib/galloca.h:30:0,

from /usr/include/glib.h:30,

from hello.c:3:

/usr/include/glib/gtypes.h:30:24: fatal error: glibconfig.h: No such file or directory

compilation terminated.

好了,终于是另外一个错误了,找不到glibconfig.h文件,来找找看。

这个文件在/usr/local/lib/glib-2.0/include这个目录里。

好的,老规矩,复制sudo cp /usr/local/lib/glib-2.0/include/glibconfig.h /usr/include/

现在编译一下

[email protected]:~/16021$ gcc hello.c

/tmp/cctK6e9Q.o: In function `main‘:

hello.c:(.text+0x11): undefined reference to `g_printf‘

collect2: ld returned 1 exit status

漂亮,现在文件问题已经没有了,开始说找不到函数。咋回事呢?库函数往往都需要编译时指定库文件名,来加上试试

gcc hello.c -o hello -lglib-2.0

[email protected]:~/16021$ gcc hello.c -o hello -lglib-2.0

/tmp/ccXsXTRK.o: In function `main‘:

hello.c:(.text+0x11): undefined reference to `g_printf‘

collect2: ld returned 1 exit status

还是找不到,上课的时候好像是讲过,自定义的库如何添加到环境变量中去,有3种方法,其中有2种可以关机不消失。一种是将库文件加入到系统库目录中,一种是在/etc/ld.so.conf.d/目录中加入.conf文件,这两种方法都可以,我这里使用一下编写.conf文件的方式,

在/etc/ld.so.conf.d/目录下新建glib.conf文件,文件中写入/usr/local/lib/,这是glib的库文件目录。

保存之后使用sudo ldconfig命令,现在在编译一下。

我开始怀疑是不是库没有安装上,上网查如何查看库的安装情况,网上给的结果是dpkg -l|grep glib命令,

网上说一个库应该有-data和-dev文件,我发现没有-dev文件,下面安装一下,谢天谢地apt有这个安装的,

命令是,sudo apt-get install libglib2.0-dev

安装过程中有个地方要y一下。

安装过程中可能会失败,要求更新软件,然后就是各种更新不了,由于天朝局域网资源实在有限,所以只能想起他办法解决,我发现我的

/etc/apt/sources.list文件可以正常更新,估计是里面的镜像地址的问题。下面列一下文件内容

######################################################################################################

# deb cdrom:[Ubuntu 12.04.1 LTS _Precise Pangolin_ - Release i386 (20120817.1)]/ precise main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to

# newer versions of the distribution.

deb http://cn.archive.ubuntu.com/ubuntu/ precise main restricted

deb-src http://cn.archive.ubuntu.com/ubuntu/ precise main restricted

## Major bug fix updates produced after the final release of the

## distribution.

deb http://cn.archive.ubuntu.com/ubuntu/ precise-updates main restricted

deb-src http://cn.archive.ubuntu.com/ubuntu/ precise-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu

## team. Also, please note that software in universe WILL NOT receive any

## review or updates from the Ubuntu security team.

deb http://cn.archive.ubuntu.com/ubuntu/ precise universe

deb-src http://cn.archive.ubuntu.com/ubuntu/ precise universe

deb http://cn.archive.ubuntu.com/ubuntu/ precise-updates universe

deb-src http://cn.archive.ubuntu.com/ubuntu/ precise-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu

## team, and may not be under a free licence. Please satisfy yourself as to

## your rights to use the software. Also, please note that software in

## multiverse WILL NOT receive any review or updates from the Ubuntu

## security team.

deb http://cn.archive.ubuntu.com/ubuntu/ precise multiverse

deb-src http://cn.archive.ubuntu.com/ubuntu/ precise multiverse

deb http://cn.archive.ubuntu.com/ubuntu/ precise-updates multiverse

deb-src http://cn.archive.ubuntu.com/ubuntu/ precise-updates multiverse

## N.B. software from this repository may not have been tested as

## extensively as that contained in the main release, although it includes

## newer versions of some applications which may provide useful features.

## Also, please note that software in backports WILL NOT receive any review

## or updates from the Ubuntu security team.

deb http://cn.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse

deb-src http://cn.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse

deb http://cn.archive.ubuntu.com/ubuntu/ precise-security main restricted

deb-src http://cn.archive.ubuntu.com/ubuntu/ precise-security main restricted

deb http://cn.archive.ubuntu.com/ubuntu/ precise-security universe

deb-src http://cn.archive.ubuntu.com/ubuntu/ precise-security universe

deb http://cn.archive.ubuntu.com/ubuntu/ precise-security multiverse

deb-src http://cn.archive.ubuntu.com/ubuntu/ precise-security multiverse

## Uncomment the following two lines to add software from Canonical‘s

## ‘partner‘ repository.

## This software is not part of Ubuntu, but is offered by Canonical and the

## respective vendors as a service to Ubuntu users.

# deb http://archive.canonical.com/ubuntu precise partner

# deb-src http://archive.canonical.com/ubuntu precise partner

## This software is not part of Ubuntu, but is offered by third-party

## developers who want to ship their latest software.

## deb http://extras.ubuntu.com/ubuntu precise main

## deb-src http://extras.ubuntu.com/ubuntu precise main

#########################################################################################################

把中间的代码复制一份,重命名为sources.list然后覆盖源文件,之后在使用sudo apt-get updata命令,很快就可以更新完成,然后在安装 sudo apt-get install libglib2.0-dev 就会成功。

然后在检查dpkg -l|grep glib应该就有了,

在编译下

gcc dello.c -o hello -lglib-2.0

通过

运行

./hello

nice!成功了!

到目前为止仅仅是运行了标准输出hello,库里面的其他功能还有很远的路要走。

推荐一个牛人的入门网址

http://blog.chinaunix.net/uid-25696269-id-466217.html

时间: 2024-11-07 00:31:04

ubuntu完整安装glib心得的相关文章

Ubuntu上安装Glib

Glib被用到很多开源库,但不知啥原因,Glib的安装并没有被整合到Ubuntu的安装源,需要自己安装. 首先下载.解压最新的版本,安装: wget http://ftp.acc.umu.se/pub/GNOME/sources/glib/2.45/glib-2.45.2.tar.xz tar -vxf glib-2.45.2.tar.xz cd glib-2.45.2.tar.xz ./configure make  sudo make install 如果出现libffi找不到的提示,则安装

Ubuntu 下 samba的安装(个人心得)

今天想为了是编程简易点就尝试了装了下samba看了很多的帖子,最终找到了一条适合我的道路来实现这个功能.我的系统是ubuntu 12.04 首先,先安装apt-get install samba 这个软件 在指定地点创建share文件(文件名自己写,代号A) 将配子文件备份一遍是永恒不变的真理(以防改错,可以恢复) cp /etc/samba/smb.conf /etc/samba/smb.conf_backup 打开配置文件 vim /etc/samba/smb.conf 通过   /secu

转载 :Linux有问必答:如何在Debian或Ubuntu上安装完整的内核源码

http://linux.cn/article-5015-1.html 问题:我需要为我的Debian或Ubuntu下载并安装完整树结构的内核源码以供编译一个定制的内核.那么在Debian或Ubuntu上有什么可行的方法来下载完整的内核源码呢? 在给你的Linux安装完整内核源码之前,先问问自己是否真的需要这样做.如果你仅仅是尝试去编译一个内核模块或是为内核定制驱动,你并不需要完整的内核源码树.你只需要安装一些与内核对应的头文件,这样就足够了. 只有在你需要生成一个定制的内核,而且内核源码中的一

在Ubuntu中安装Docker

前言 网上已经有很多介绍Docker安装的文章,自己的安装过程记录一下,为了博客文章结构的连贯性,为写下一篇R和Docker的相遇做为环境基础,同时也给自己一个备忘. 目录 Docker是什么? 在Linux Ubuntu中安装Docker Docker镜像仓库 制作自己的Docker镜像 上传Docker镜像到公共仓库 完整文章:http://blog.fens.me/linux-docker-install/

Ubuntu下安装FTP服务及使用(VSFTPD详细设置)(二)

vsftpd 作为一个主打安全的FTP服务器,有很多的选项设置.下面介绍了vsftpd的配置文件列表,而所有的配置都是基于vsftpd.conf这个配置文件 的.本文将提供完整的vsftpd.conf的中文说明.学习本文的内容将有助于你初步了解vsftpd的配置文件,但针对具体情况还需要制定具体的配置 方法. Vsftpd的配置文件: /etc/vsftpd/vsftpd.conf 主配置文件 /usr/sbin/vsftpd Vsftpd 的主程序 /etc/rc.d/init.d/vsftp

Ubuntu上安装QQ2015

先不卖关子直接上图:Ubuntu 14.04.5 LTS Deb包下载地址: http://www.longene.org/download/WineQQ7.8-20151109-Longene.deb http://pan.baidu.com/s/1kTu9ZUZ 下载完成后双击会跳转到Ubuntu Software Center中安装,如果提示未经认证的deb包源请忽略继续安装:32位依赖库的问题请自行解决,可以百度或者谷歌关键字ubuntu 安装32 bit依赖库: 导语 本文的目的不在于

在Ubuntu中安装Redis

原文地址:http://blog.fens.me/linux-redis-install/ 在Ubuntu中安装Redis R利剑NoSQL系列文章,主要介绍通过R语言连接使用nosql数据库.涉及的NoSQL产品,包括Redis, MongoDB, HBase, Hive, Cassandra, Neo4j.希望通过我的介绍让广大的R语言爱好者,有更多的开发选择,做出更多地激动人心的应用. 关于作者: 张丹(Conan), 程序员Java,R,PHP,Javascript weibo:@Con

Ubuntu Desktop安装及桌面美化(修复图片)

Ubuntu Desktop安装及桌面美化 1   开篇概述 本 系统的文章主要是讲互联网方向的开发主题.根据目前主流互联网公司的技术架构,Linux是必不可少的.对于一直习惯于在Windows下工作和开发的人 来说,习惯在Linux系统下工作是进入互联网领域的第一步.故本文主要面向的对象是已经有了熟悉的Windows下的操作基础,同时有志于了解 Linux系统的同学. 备注: 本文主要以Linux的Ubuntu 14.0 LTS发行版为例子进行讲解. 本文的操作都是基于系统连接了互联网的情况下

Android虚拟环境的工具集Genymotion完整安装教程

Genymotion提供Android虚拟环境的工具集.相信很多Android开发者一定受够了速度慢.体验差效率及其地下的官方模拟器了.如果你没有物理机器,又不想忍受官方模拟器的折磨,Genymotion会是你非常不错的选择.Genymotion支持Windows.Linux和Mac OS,容易安装和使用,下面就然我们一起来体验神器给我们带来的快感吧. Genymotion特性 提供最好的Android模拟体验 支持OpenGL加速,提供最好的3D性能体验 支持从Goole Play安装应用 支