0%

[TOC]

自动化编译autotools的使用

具体操作步骤

  • 准备好源码文件helloworld.c 及 Makefile.am文件。
  • 执行autoscan生成configure.ac并修改configure.ac
  • aclocal;
  • autoheader;
  • touch README NEWS AUTHORS ChangeLog
  • autoconf;
  • automake –add-missing;
  • ./configure;
  • make;
  • ./helloworld ; —运行程序
  • make dist —制作发布的包
  • make dist —制作发布的包并对其进行测试检查
  • make clean —清除make命令产生的目标文件及可执行文件

automake autoconf 自动化编译说明

利用autotools自动生成makefile文件,自动化编译自己的工程,autotools工具只需要用户输入简单的目标文件、依赖文件、文件目录就可以轻松地生成Makefile了。

首先安装autotools系列工具,包括aclocal、autoscan、automake、autoheader、autoconf等。

可以通过rpm –qa | grep auto来查看各个应用程序,如果没有

yum install automake 即可安装。

详细步骤:

1 建立自己的工程,编写源文件并创建Makefile.am

1)最顶层目录名为模块名 helloworld

源文件放在模块下面的src子目录,例如helloworld/src

  1. 在src 下面,创建源文件main.c

  2. 在helloworld目录下面创建Makefile.am文件—(为Makefile.in的模板文件,.am扩展名是automake的缩写),内容如下:

1
SUBDIRS=src
  1. 在helloworld/src 目录下创建Makefile.am文件 内容如下:
1
2
3
bin_PROGRAMS=helloworld

helloworld_SOURCES=main.c

其中,PROGRAMS表示要产生的是可执行文件,有多个可执行文件文件时,可用空格分开,而bin表示可执行文件的安装目录SOURCES表示生成可执行文件需要的源文件,有多个源文件时,也用空格分开。比如想生成两个可执行程序helloworld1和helloworld2,那么就需要写成:

1
2
3
4
5
bin_PROGRAMS=helloworld1 helloworld2

helloworld1_SOURCES=main1.c

helloworld2_SOURCES=main2.c

2. autoscan —创建autoconf的模板

autoscan—将生成configure.ac和autoscan.log文件,它会在给定目录及其子目录树中检查源文件,若没有给定目录,就在当前目录及其子目录树中进行检查。它会搜索源文件以寻找一般的移植性问题并且创建一个文件configure.ac,通过这个文件我们可以创建autoconf需要的模版文件。

1).目录下面生成了configure.ac 文件,利用命令

configure.ac 文件为autoconf 的模板文件,内容如下所示,其中#行为注释行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# -*- Autoconf -*-

# Process this file with autoconf to produce a configure script.


AC_PREREQ([2.68])

AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])

AC_CONFIG_SRCDIR([src/main.c])

AC_CONFIG_HEADERS([config.h])


# Checks for programs.

AC_PROG_CC


# Checks for libraries.


# Checks for header files.


# Checks for typedefs, structures, and compiler characteristics.


# Checks for library functions.


AC_CONFIG_FILES([Makefile
src/Makefile])

AC_OUTPUT

2). 修改configure.ac文件

1
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])

修改为:

1
AC_INIT(helloworld, 0.1, shaoguangleo@gmail.com)     =–初始化autoconf

并添加

1
AM_INIT_AUTOMAKE(helloworld, 0.1)         =–初始化automake 必须的宏,这个如果不添加就会导致在autoconf时出错,信息大概为configure.in:no proper invocation of AM_INIT_AUTOMAKE was found

3.运行 aclocal — 复制所有的宏命令

1
aclocal

备注:configure.ac 里面包含了一系列的宏命令,运行aclocal的目的是把工程需要的宏命令展开。(aclocal.m4 就是configure.ac中用到的宏定义)会生成autom4te.cache文件夹和aclocal.m4文件。

4.运行autoheader —生成配置头文件的模板config.h.in并创建4个必要的文件

1
autoheader

备注:此时再创建4个必要的文件

1
touch README NEWS AUTHORS ChangeLog
  • README :描述模块的功能,用法和注意事项
  • NEWS : 描述模块最新的动态
  • AUTHORS : 模块的作者及联系方式
  • ChangeLog : 记录模块的修改历史

上述几个文件可以暂时为空。

5. automake –add-missing — 生成Makefiel.in和所需要的脚本

1
automake –add-missing   —其中add-missing选项会让automake自动添加一些必须的脚本文件。

6. autoconf — 生成configure脚本

1
autoconf

—生成configure脚本

7. ./configure — 生成最终的Makefile文件

1
./configure

configure 通常有两个参数

  1. –prefix 用来指定安装目录 linux默认/usr/local
  2. –host 用于交叉编译

8 编译

1
make

9 安装

1
make install

10 发布软件包

1
make dist或者make distcheck

生成helloworld-0.1.tar.gz

autotools生成Makefile流程图

Ubuntu11.10初始配置

升级软件源

选择服务器。打开ubuntu软件中心,在顶部菜单栏里进入 “编辑—>软件源”,在 “ubuntu软件” 菜单卡中的 “下载自:” 选择合适的服务器。中国大陆用户选择 “中国的服务器” ,然后可能会需要输入密码,你输入就是。修改好后 “关闭” 。
升级软件源。sudo apt-get update && sudo apt-get upgrade

安装常用插件、拓展包、语言支持。

1.sudo apt-get install ubuntu-restricted-extras —安装解码器、flashplayer、java虚拟机、微软字体及一些以前由于版权受限的软件包
2.系统设置–语言支持 —安装需要的语言包
3. “系统设置” 中进入 “附加驱动”

安装CCSM

1
$ sudo apt-get install compizconfig-settings-manager

安装gnome 3

3 目前已在Ubuntu 11.10 源中,如果喜欢GNOME 3桌面环境,可通过软件中心或下面命令安装gnome 3:
apt-get install gnome-shell
Shell”登录即可;
如果你喜欢KDE界面,可选择Kubuntu版本下载;喜欢lxde桌面环境,则下载Lubuntu版本即可。当然,我们可以在Unity环境下进行安装。

1
$  sudo apt-get install kubuntu-desktop

安装系统工具

1
$  sudo apt-get install utweak  ailurus git-core git planner freeMind dia nautilus-open-terminal indent

互联网工具

1
$ sudo apt-get install pidgin

音频播放

1
$ sudo apt-get install vlc audacious mplayer mplayer-fonts mozilla-mplayer

安装编码:

1
$  sudo apt-get install non-free-codecs libxine1-ffmpeg gxine mencoder libmpcdec3 libquicktime1 flac faac faad sox ffmpeg2theora libmpeg2-4 uudeview flac libmpeg3-1 mpeg3-utils mpegdemux liba52-dev mpeg2dec vorbis-tools id3v2 mpg321 mpg123 libflac++6 ffmpeg libmp4v2-0 totem-mozilla icedax tagtool easytag id3tool lame nautilus-script-audio-convert libmad0 libjpeg-progs

  若要支持DVD,则安装

1
2
$ sudo apt-get install libdvdcss2
$ sudo /usr/share/doc/libdvdread4/./install-css.sh

字典

1
$  sudo apt-get install stardict

安装解压工具

1
$  sudo apt-get install unace unrar zip unzip p7zip-full p7zip-rar sharutils rar uudeview mpack lha arj cabextract

图形

1
$  sudo apt-get install shutter gthumb

输入法

1
$ sudo apt-get install fcitx

软件开发配置

1
$ sudo apt-get install build-essential samba vim vim-full  ssh bison flex sharutils automake emacs  libc6 libc6-dev manpages-dev gnome-core-devel libglib2.0-doc libgtk2.0-doc  devhelp glade-gnome glade-common glade-doc python ruby erlang

gvim打开中文乱码

可以使用:set encoding=gb2312来支持。

检验和编辑数据

最开始的时候,一个比较有用的检查是画出 Amplitude uv radius的图,即radial plot

直接输入命令:

1
0> radplot

因为是第一次使用PGPLOT窗口,所以刚开始需要制定数据输出的设备,最好的选择是/xw,这个可以使用下面的命令来制定:

1
0> device /xw

现在应该可以看到这幅图像了,下面是一些有用的键盘交互操作。如果希望了解更多的信息,可以使用h来获取更多的信息。

  • X - 退出radplot,也可以在任何时候右键点击来操作
  • L - 重绘整个图像,在做了一些修改后最好刷新一下
  • n - 高亮显示下一个望远镜
  • p - 高亮显示上一个望远镜
  • T - 从键盘制定需要高亮显示的望远镜
  • s - 显示鼠标最接近点的基线和时间
  • A - (Left-mouse-button) Flag 掉最接近光标的点
  • C - 选定需要flag掉的整块区域
  • Z - 选定一个新的amplitude 或 phase display 范围
  • U - 选定一个新的 UV-radius 范围

一些有用的技巧

[TOC]

Intel Virtualization Technology虚拟化技术

为什么会设计到Intel VT

在使用VirtualBox安装64位的CentOS的时候提示是否开启了该选项。

开启方法,进入BIOS,在Advanced中有选项Intel Virtualization Technology,使其Enabled即可。
Intel Virtualization Technology有什么实在的用处呢,最简单来说就是可以使虚拟机的运行速度几乎接近实体机器的水平

Intel VT虚拟化技术的作用:

1、在开启VT时,能够提高虚拟机软件(VMWare,MS Virtual server等)所产生的虚拟机的内存和磁盘性能,对CPU性能的提升不明显!
2、只有在开启VT后,才能够在32位的操作系统中(如XP,Vista)虚拟出64位的操作体统(如64-bit XP等)。

不开启VT,32位系统不能虚拟出64位系统。
这点对于日常使用32位系统,偶尔使用64位系统的用户很有用!!

用户如何选择CPU对VT的支持与否?

1、如果你只是使用单一操作系统,如XP,Vista,没有机会使用虚拟机,那么VT对你毫无用处!!还不如选择不支持VT的CPU,省钱!!
2、如果你需要使用虚拟机,不管是VMWare,还是MSVS2005,使用支持VT的CPU都能够提高虚拟机的性能,特别是磁盘和内存性能。应该选支持VT的CPU,何况也贵不了多少钱!呵呵

下面参考文章的重点信息

1、VMware在不支持Intel VT的IA32架构CPU上无法虚拟64-bit客户操作系统,因为无法在客户OS之间安全地隔离。
2、我们谈到了目前IA32架构采用Ring等级带来的虚拟化难题,自然而言地,我们可以预料到Intel Virtualization Technology可以解决这些问题。  不错,Intel VT就是为此而生。作为一个芯片辅助(Chip-Assisted)的虚拟化技术,VT可以同时提升虚拟化效率和虚拟机的安全性,下面我们就来看看 Intel VT带来了什么架构上的变迁。我们谈论的主要是IA32上的VT技术,一般称之为VT-x,而在Itanium平台上的VT技术,被称之为VT-i。

3、主流的虚拟机软件都开始支持x86虚拟化技术了——包括Intel VT和AMD-V。

4、 软件虚拟化领域的巨头VMware的产品是完全虚拟化的著名例子,一般的VMware Workstation和VMware Server都属于Hosted Architecture寄居架构,而企业级产品VMware ESX Server则属于Bare Metal Architecture裸金属架构,这种架构在商业化产品上很难得,可以充分地发挥硬件的威力。我们使用VMware Server的原因是:易于使用。ESX Server难以配置。VMware Server包含了很多组件。强大的网络功能是VMware的特色:两个VMware虚拟网卡。VMware可以实现非常复杂的虚拟化网络环境。

5、Microsoft Virtual Server 2005 R2发布也有了一段时日,虽然仍不如VMware完善,不过提供了一些VMware不能提供的有趣特性。

6、Intel方只有在支持VT的CPU上才能安装64-bit客户操作系统。

7、同时运行两个虚拟机,VMware就建立两个VMware Server VMX进程。每个虚拟机虚拟了两个CPU,因此每个VMware Server VMX进程就具有两个虚拟CPU线程,并分布在我们硬件的两个CPU核心上。

8、 我们分别在Window Server 2003 R2 Enterprise Edition SP2的32bit和64bit环境下进行了测试——主机操作系统和客户操作系统都分别采用了这两种操作系统,并再分别测试了VT和无VT下的表现。主机 的性能也进行了测试。(详细测试数据参看原文)

9、CPU性能
  在仅运行单个虚拟机的情况下,理论测试表明,在32bit主机操作系统下打开VT并没有性能上的优势——64bit下则相反,打开VT可以获得更好的CPU性能。
  虽然VMware虚拟出来的显卡并不能支持“硬件”3D操作,不过OpenGL仍然可以运行,我们可以看出其虚拟OpenGL运行的性能非常之低,这时VT在32bit下的CPU表现不错。
  总体而言,VT在CPU性能上没有显示出什么特别的地方,看来VT须要在更大的虚拟机负荷下才能表现出其性能上的优势。

10、内存性能
  由于虚拟架构改变,VT下的内存性能表现非常好,如WinRAR这样的成绩非常突出。

11、磁盘性能
  虚拟机情况下的磁盘性能非常之强劲,这是因为相关的数据很容易地就可以缓冲的缘故,这需要大量的内存支持。
  这是我们虚拟机所在的硬盘HD Tach RW测试成绩,虚拟机的虚拟磁盘都位于这个WD3200YS的前端。

  32bit Host OS/32bit Guest OS,VT打开下的HD Tach RW,读写速度和WDC3200YS前段速度一致,而突发速率则要高出不少。

  32bit Host OS/64bit Guest OS下的突发传输更快,达到了349.1MB/s,这实际上表现了64bit系统比32bit系统的内存性能更加强劲。

  64bit Host OS/32bit Guest OS,没有打开VT的情况下,也能提供很不错的突发速度:300.5MB/s。

  64bit Host OS/32bit Guest,打开VT之后与上面对比,突发略有下降。

64bit性能

  毫无疑问,64bit下可以提供更好的CPU性能、内存性能。

12、 由于使用了负荷并不算强的理论测试软件,因此仅能测试架构带来的理论性能表现:CPU理论性能方面并无太大差别,而内存性能则使用VT后具有明显的提升。 同时,Intel的Long模式64bit无法提供内存隔离所需要的足够保护措施,而通过Intel VT技术,则能解决这个问题,因此Intel CPU只有具有VT技术的时候才能运行64bit虚拟机。更好的隔离性或许用户一眼无法看到,然而当客户操作系统异常崩溃的时候,你才可以感觉到它的用处。
在3~4个虚拟机的普通CPU负载下,VMware有望从芯片辅助的虚拟化技术中获益,我们期望在下一篇文章中对ESX Server 3.0进行测试,ESX看起来可以充分利用新的处理器特性,应该会有大量的性能提升。

参考文章为:http://pc.sanhaostreet.com/NewsData/2007/6/20076261759506061.shtml

centos自动挂载ntfs

CentOS内核没有添加对ntfs的支持,所以我们需要安装ntfs-3g和fuse,这个有详细的介绍。安装完成后我们就可以使用mount –t ntfs-3g来对U盘或者移动硬盘进行挂载了。

那我们能不能对其进行自动挂载呢,这里涉及到每次插入不同的盘,可能出现的盘符不相同,所以在fstab中不能写这些东西,当然,双系统是另外一回事了。

解决方法如下:

用root权限建立/sbin/mount.ntfs文件,内容如下:

1
2
3
#!/bin/sh
export LANG=en_US.UTF-8
exec /sbin/mount.ntfs-3g "$@"

给/sbin/mount.ntfs文件可执行权限

1
chmod a+x /sbin/mount.ntfs

保存后重新插入移动硬盘

PS:这个针对CentOS系统,对于直接支持ntfs的Fedora和Ubuntu等发行版不适用。

向逝去的大牛人致敬

Steve Jobs 卸任后,2个月就辞世了;

Dennis Ritchie,c语言和UNIX之父,也辞世了;

今天刚刚收到消息Lisp之父,人工智能之父John McCarthy辞世

大牛们果然是一起来的,也是一起去呀………………

今天完成了share memory的测试

今天在hcorr上完成了share memory的测试。

通过PCI驱动存取LTA数据并通过PGPLOT实时刷新显示。

工作流程:

1
2
3
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>

create share memory

1
2
3
4
5
6
7
8
9
10
11
shm_id = shmget(shm_key_id, SHM_BUF_SIZE, 0666|IPC_CREAT);

if (shm_id < 0) {

perror(“share memory error.”);

exit(1);

}

shm_data_buf= shmat(shm_id,0,1);

using share memory

1
2
3
4
5
6
7
8
9
10
11
shm_id = shmget(shm_key_id, SHM_BUF_SIZE, 0666);

while (shm_id < 0) {

printf(“waiting the share memory content …%dr”, j++);

sleep(1);

}

shm_data_buf = shmat(shm_id, 0, 1);

read系统调用

用法:

1
2
3
#include <unistd.h> 

ssize_t read(int fd,void *buf,size_t nbyte)

read函数是负责从fd中读取内容.成功时,read返回实际所读的字节数,如果返回的值是0,表示已经读到文件的结束了.
小于0表示出现了错误.如果错误为EINTR说明读是由中断引起的, 如果是ECONNREST表示网络连接出了问题.

1
2
3
#include <unistd.h> 

ssize_t write(int fd,const void *buf,size_t nbytes)

write函数将buf中的nbytes字节内容写入文件描述符fd.成功时返回写的字节数.失败时返回-1. 并设置errno变量. 在网络程序中,当我们向套接字文件描述符写时有俩种可能.
1)write的返回值大于0,表示写了部分或者是全部的数据.
2)返回的值小于0,此时出现了错误.我们要根据错误类型来处理. 如果错误为EINTR表示在写的时候出现了中断错误.
如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接).