10月 21

Ubuntu 多硬盘 LVM 方式安装

一、首先选择“使用所有硬盘并用LVM安装”那个选项,然后选择第一块硬盘(sda)一直向下自动配置KVM,这个主要目的是让系统自动建立boot扇区并确定大小。

二、第一步弄完后不要把东西写入,在提示是否写入并格式化磁盘的时候选择否,这样就可以手动继续配置其他硬盘了。

三、去LVM管理器,把系统自动创建的 swap 逻辑卷组 和 root / 分区统统删掉

四、把其他硬盘(sdb、sdc……)统统创建分区表,然后格式化成整个的逻辑硬盘,选择使用的时候选用于LVM

五、再去LVM管理器,创建一个卷组main,把所有sda5, sdb5, sdc5……统统加进去,这样整个硬盘组就加完了

六、创建一个swap逻辑卷组,内存两倍大,其他统统分配到 / 逻辑卷组里面去

10月 20

Ubuntu Mysql

 

一、首先要安装mysql server

sudo apt-get install mysql-server 就行

二、然后要安装boost库

http://www.boost.org去下载,上面的getting started说得很清楚

三、然后下载ODCB-connector和mysql-c++-connector,注意,这是两个东西

mysql-c++-connector是库,ODCB-connector要用到它,下载完后直接拷贝进 /usr/local

而ODCB-connector可以安装,用 apt-get install libmysqlcppconn-dev 可以安装

而如果要手动安装 ODCB-connector,要先 apt-get install libmysqlclient-dev

四、编程序的时候要加 -lmysqlcppconn

注意,这个选项在NetBeans中是这样加的:

选择 项目配置->定制->链接器->库,然后选择“添加库”,直接填写 mysqlcppconn,-l 这个参数是自动加的

10月 18

关于编码转换

 

一、安装

去 http://www.gnu.org/software/libiconv/ 上面下载 iconv

然后按照网页上的说明安装就行,注意一定要用那个–prefix=/usr/local的参数,这样才能保证使用刚安装的这个iconv.h,而不是系统自带的

安装完了还要弄个文件链接:ln -sf /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2

否则使用iconv命令时会提示说没有共享链接库 libiconv.so.2

 

二、编程注意

注意编译的时候要加命令 -liconv,如果用IDE要到IDE设置里面加上

汗,今天(2011年10月27日),用Ubuntu11.10 64位编写程序,发现加入-liconv 竟然还是 undefined reference to libiconv_open

我就受不了了,搞了一整天,发现实因为NetBeans把 -liconv 这个参数加到了 g++ 紧随其后,而我自己写g++编译命令时把-liconv写在最后面竟然能够编译通过!

无奈,最后只能在项目配置,链接器里面附加一个库了,在链接器里加上 /usr/local/lib/libiconv.so就行了

另外一种弄法:

 

选择 项目配置->定制->链接器->库,然后选择“添加库”,直接填写 iconv,-l 这个参数是自动加的

 

三、Linux编码知识

在Linux上wchar_t一般以UCS-4标准

UCS-4-INTERNAL ,UCS-2-INTERNAL  会根据本机的存储方式(大端、小端)进行处理。

还有UCS-2LE和UCS-2BE 分别代表小端和大端模式。

Unicode(UCS) 有两套编码集,UCS-2 和 UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节。

Windows 的内部其实是用的 UCS-2 标准,并用 UTF-16 来实现。而非 Windows 系统大多采用了 UTF-8 实现。

在windows上wchar_t是2个字节表示,而在Linux上wchar_t是4个字节表示的。这样写跨平台的程序时,就会不统一。

UTF编码简介:

UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:

UCS-2编码(16进制) UTF-8 字节流(二进制) 

0000 – 007F 0xxxxxxx 

0080 – 07FF 110xxxxx 10xxxxxx 

0800 – FFFF 1110xxxx 10xxxxxx 10xxxxxx 

例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。

UTF-16以16位为单元对UCS进行编码。对于小于0x10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。对于不小于0x10000的UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF-16和UCS-2基本相同。但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。

总结一下:

Windows里的wchar_t,也就是所谓的unicode的叫法,其实是UCS-2,也就是UTF-16,这种编码“A”的话是两字节, 00 38

而ASCII  GB2312  GBK  GB18030是一样东西,里面的“A”就只有一个字节 38,而中文有两个字节,高字节的最高位是1,低字节最高位有可能不是1

UTF-8就是3字节

而UCS-4是4字节,是linux里面的wchar_t

5月 17

Ubuntu配置大全

 

1.解决useradd新用户默认使用sh而不是bash的问题

  useradd之后,使用 usermod -s /bin/bash username 就可以把默认控制台修改为 bash

      然后拷贝其他目录里已经有的 .bashrc 和 .profile 到新用户文件夹,这样就可以像系统默认用户一样有颜色啦

5月 13

ubuntu 中文设置

 

【参考】

http://wiki.ubuntu.org.cn/Locale

Locale配置文件在 /etc/default/locale

linux文件系统的一些概念,linux的文件系统的文件名是基于字节流的,也就是说文件名的编码以byte为单位读取的,所以文件名可以是多字节编码方案,比如gb18030, utf8,不能是宽字节编码,比如如windows使用的utf16。所以只要是多字编码方案的文件名,linux都是可以读取的。 

1)为glib的国际化支持产生国标编码支持,ubuntu系统默认状态下是没有GB18030和GBK的本地locale的,所以为了设置locale为zh_CN.GB18030,我们需要先为glib产生GB18030和GBK编码的支持。 
1、首先设置sudo vi /var/lib/locales/supported.d/local 
添加一行 zh_CN.GBK GBK和zh_CN.GB18030 GB18030,把原来的UTF-8那一行仍旧保留在最后!
2、sudo locale-gen, 或者可以直接sudo locale-gen zh_CN.GB18030 和 sudo locale-gen zh_CN.GBK

安装Chinese包

先更新源:在 sudo gedit /etc/apt/soures.list 里面添加如下内容

deb http://ubuntu.cn99.com/ubuntu/ gutsy main restricted universe multiverse 
deb http://ubuntu.cn99.com/ubuntu/ gutsy-security main restricted universe multiverse 
deb http://ubuntu.cn99.com/ubuntu/ gutsy-updates main restricted universe multiverse 
deb http://ubuntu.cn99.com/ubuntu/ gutsy-proposed main restricted universe multiverse 
deb http://ubuntu.cn99.com/ubuntu/ gutsy-backports main restricted universe multiverse 
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy main restricted universe multiverse 
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-security main restricted universe multiverse 
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-updates main restricted universe multiverse 
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-proposed main restricted universe multiverse 
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-backports main restricted universe multiverse 
deb http://ubuntu.cn99.com/ubuntu-cn/ gutsy main restricted universe multiverse

然后system->system manager->language support,安装chinese语言包,更新即可。原来以为安装的时候选择中文就可以了,谁知道安装好后,还需要继续安装chinese语言包。或者用命令单独下载中文就直接 sudo apt-get install language-pack-zh.

二、到底什么是locale?

locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。

这个用户环境可以按照所涉及到的文化传统的各个方面分成几个大类,通常包括用户所使用的语言符号及其分类(LC_CTYPE),数字 (LC_NUMERIC),比较和排序习惯(LC_COLLATE),时间显示格式(LC_TIME),货币单位(LC_MONETARY),信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES),姓名书写方式(LC_NAME),地址书写方式(LC_ADDRESS),电话号码书写方式 (LC_TELEPHONE),度量衡表达方式(LC_MEASUREMENT),默认纸张尺寸大小(LC_PAPER)和locale对自身包含信息的概述(LC_IDENTIFICATION)。

所以说,locale就是某一个地域内的人们的语言习惯和文化传统和生活习惯。一个地区的locale就是根据这几大类的习惯定义的,这些locale定义文件放在/usr/share/i18n/locales目录下面,例如en_US, zh_CN and de_DE@euro都是locale的定义文件,这些文件都是用文本格式书写的,你可以用写字板打开,看看里边的内容,当然出了有限的注释以外,大部分东西可能你都看不懂,因为是用的Unicode的字符索引方式。

对于de_DE@euro的一点说明,@后边是修正项,也就是说你可以看到两个德国的locale:

/usr/share/i18n/locales/de_DE@euro
/usr/share/i18n/locales/de_DE

打开这两个locale定义,你就会知道它们的差别在于de_DE@euro使用的是欧洲的排序、比较和缩进习惯,而de_DE用的是德国的标准习惯。

上面我们说到了zh_CN.GB18030的前半部分,后半部分是什么呢?大部分Linux用户都知道是系统采用的字符集。

七、怎样设定locale呢?

设定locale就是设定12大类的locale分类属性,即 12个LC_*。除了这12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL和LANG。它们之间有一个优先级的关系:

LC_ALL>LC_*>LANG

可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值。

    • 如果你设定了LC_ALL=zh_CN.UTF-8,那么不管LC_*和LANG设定成什么值,它们都会被强制服从LC_ALL的设定,成为 zh_CN.UTF-8。
    • 假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*=en_US.UTF-8,并且没有设定LC_ALL的话,那么系统的locale设定以LC_*=en_US.UTF-8。
    • 假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*,和LC_ALL均未设定的话,系统会将LC_*设定成默认值,也就是LANG的值 zh_CN.UTF-8 。
    • 假如你设定了LANG=zh_CN.UTF-8,而其他的LC_CTYPE=en_US.UTF-8,其他的LC_*,和LC_ALL均未设定的话,那么系统的locale设定将是:LC_CTYPE=en_US.UTF-8,其余的 LC_COLLATE,LC_MESSAGES等等均会采用默认值,也就是LANG的值,也就是LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=zh_CN.UTF-8。

所以,locale是这样设定的:

    • 如果你需要一个纯中文的系统的话,设定LC_ALL= zh_CN.XXXX,或者LANG= zh_CN.XXXX都可以,当然你可以两个都设定,但正如上面所讲,LC_ALL的值将复盖所有其他的locale设定,不要作无用功。
    • 如果你只想要一个可以输入中文的环境,而保持菜单、标题,系统信息等等为英文界面,那么只需要设定LC_CTYPE=zh_CN.XXXX,LANG= en_US.XXXX就可以了。这样LC_CTYPE=zh_CN.XXXX,而LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=en_US.XXXX。
export LC_CTYPE="zh_CN.UTF-8"
使用export命令
    • 假如你高兴的话,可以把12个LC_*一一设定成你需要的值,打造一个古灵精怪的系统:
LC_CTYPE=zh_CN.GBK/GBK(使用中文编码内码GBK字符集);
LC_NUMERIC=en_GB.ISO-8859-1(使用大不列颠的数字系统)
LC_MEASUREMEN=de_DE.ISO-8859-15@euro(德国的度量衡使用ISO-8859-15字符集)
罗马的地址书写方式,美国的纸张设定……。估计没人这么干吧。
注意,修改这些LC_XXX 的位置在 /etc/environment
还有一个地方叫做 /etc/default/locale
但是Ubuntu Server的console就是不支持中文,因此装完机要改回英文
用vim配置语言环境变量
vim /etc/environment
改成:
LANG=”en_US.UTF-8″
LANGUAGE=”en_US:en”
sudo vim /var/lib/locales/supported.d/local
加一行
en_US.UTF-8 UTF-8
保存后,执行命令:
sudo locale-gen
sudo vim /etc/default/locale
修改为:
LANG=”en_US.UTF-8″
LANGUAGE=”en_US:en”
重启Ubuntu Server
sudo reboot
至此 方格乱码解决
5月 05

关于 DirectShow 中各个例子的编译转换问题

那些项目都是老旧的VC2003的,转换成05、08后,会有一系列编译问题,具体操作如下:

1. 首先要安装 DirectX SDK 和 Windows SDK,两个版本最好是相对应的,一致的,不能一个旧一个新。

2. 首先要编译基本库 BaseClasses, 编译时会遇到 ctlutil.h 中 operator=(LONG); 这一句不支持默认int的问题,这时需要在C/C++下的命令行添加一个编译指令 /wd4430

3. BaseClasses这个项目的默认 include 目录是相对与以前的DXSDK目录设置的(.,..\..\..\..\include),现在过期了,要重新设置成新安装的include目录,同时需要更改管理员->命令行下那个附加的库,直接把库删掉就行

4. 编译 StillCap,里面有个Qedit.h,新SDK For Win7里根本没有,幸好SDK6.0里有,找到它,去掉里面的一句话,把dxtrans.h注释掉,然后在#include <qedit.h>前面加上四句话

#define __IDxtCompositor_INTERFACE_DEFINED__

#define __IDxtAlphaSetter_INTERFACE_DEFINED__

#define __IDxtJpeg_INTERFACE_DEFINED__

#define __IDxtKey_INTERFACE_DEFINED__

5. 编译 StillCap 会出现很多外部链接没有,其实少了一个 striids.lib ,这个lib是windows SDK的,新的SDK里叫做 strmiids.lib

6. CMediaType 依赖的就是Baseclasses库,即需要strmbas lib

Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow 下也有一份示例代码,这些代码都是最新的VS2005的,很好用,不过如果把include目录添加到了VC++目录的最后面,就会因为采用了VC8的旧h文件而出现 error C2061: syntax error : identifier ‘__deref_out_range’

所以要把WinSDK和DXSDK的附加包含目录条目写在最前面!

4月 26

NDIS 中间层驱动的任何注意事项

1. 安装passthru的时候,那个netsf_m是用来安装mini port的,要先拷贝到c:\windows\inf目录下面去,否则安装后passthru无效。

2. VS2010编译环境的设置,首先按照 http://www.cnblogs.com/xlhblog/archive/2011/03/22/1991785.html 进行通用WDK设置配置环境,然后对passthru项目单独设置,这些设置只要按照sample的source文件下定义的内容来就好了

2.1 预定义,添加 NDIS_MINIPORT_DRIVER;NDIS_WDM=1;NDIS51_MINIPORT=1;NDIS51=1;

2.2 附加依赖库添加 ndis.lib

2.3 修改 C/C++ -> 预编译头 为 “创建/Yc” 并且预编译头文件为precomp.h

4月 22

Ubuntu 下 Mysql 安装与连接

1.安装

sudo apt-get install mysql-server

注意要求添加root密码时最好别填

sudo apt-get install mysql-client

sudo apt-get install libmysql++-dev

sudo apt-get install libmysql++3

2.NetBeans 配置

MySQL 5.1 Manual 里面有写,写得很清楚,如果是静态链接,只要把 libmysqlcppconn-static.a 和 libmysqlclient.a 两个文件添加到项目附加库就行。

其实就是加了两个参数 -lmysqlclient 和 -lmysqlcppconn-static