工作笔记 第二季

来源:互联网 发布:sql中not in 编辑:程序博客网 时间:2024/06/10 01:44

第一部分:环境设置与系统指令

 

一、VMWare上安装Debian系统。主机为xp系统 (此处安装的Debian32位的系统)

虚拟机的网络配置方法如下:

设置主机Xp系统的配置:自动寻址

设置Debian系统配置:DHCP

注:在创建磁盘时,勾选“即时分配硬盘空间”

第一步:在xp系统(主机系统)的管理工具中服务找到如图所示的两项服务然后启动。

 

1管理工具里的服务

第二步:打开VMWare-Edit-Virtual Network Editor.配置成为以下图所示的形式。

 

2 VMWare下的网页设置

第三步:启动Debian系统然后在如图所示的地方设计网络

 

3 Debian系统下的网络设置

第四步:在网络设置的有线连接下设置为DHCP方式

 

4 Debian有线网络设置

二、虚拟机缩减物理磁盘方法:

方法一:通过主机的Console

 

5 xp为虚拟机缩减磁盘

方法二:缩减Debian系统下的一些缓存:

Sudo apt-get autoclean清理旧版本软件的缓存

Sudo apt-get clean清理所有软件的缓存

Sudo apt-get autoremove删除系统不再使用的孤立软件

VMWare的安装过程中新建虚拟磁盘时,填写磁盘大小后选择Split disk to 2G files

注:安装Debian系统下的VMWare tools

三、Linux下火狐环境搭建:

第一步:下载如下网址内的SDK(火狐插件的SDK)https://developer.mozilla.org/en/Gecko_SDK

第二步、如果登陆界面不让用root用户登录,可以点击登陆界面正下方的:行为-安全-允许管理员登陆。此时就登陆特权人员。

第三步:安装飞信

(注:为了实现主机与虚拟机的文件夹传输,主机已经用老版本的飞鸽传书)

GNU gettext tools not found; required for intltool

#sudo aptitude install gettext

checking for XML::Parser…configure:error:XML::Parser perl module is required for intltool

#perl -MCPAN -e shell

install XML::Parser(就是终端中提示的安装的类型)

configure: error: Package requirements (libgnomeui-2.0 >= 2.14

gtk+-2.0 >= 2.4

glib-2.0 >= 2.8) were not met:

No packagelibgnomeui-2.0 found

No packagegtk+-2.0 found

#sudo apt-get install libgnomeuimm-2.6-dev

No package 'libpanelapplet-2.0' found

#sudo apt-get install libpanelappletmm-2.6-dev

1、 没有位置与之对应文档都打不开

apt-get install nautilus gnome-volume-manager

2、 登录系统时无法进入图形登陆界面

apt-get -u install x-window-system-core

apt-get -u install gdm gdm-themes

apt-get -u install gnome

3、如果debian系统没有gdb指令

apt-get build-dep gdb

四、VMWare的主机系统与虚拟系统通信

/usr/bin/vmware-toolbox-cmdLinuxvmware的安装目录

五、Linux下特殊指令

挂载时使用mount命令:
格式:mount [-参数] [设备名称] [挂载点
]

其中常用的参数有

-t<
文件系统类型>指定设备的文件系统类型,常见的有:

minix linux
最早使用的文件系统

ext2 linux
目前常用的文件系统

msdos MS-DOS
fat,就是
fat16
vfat windows98
常用的
fat32
nfs
网络文件系统

iso9660 CD-ROM
光盘标准文件系统

ntfs windows NT 2000
的文件系统

hpfs OS/2
文件系统

auto
自动检测文件系统

-o<
选项>指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的有

codepage=XXX
代码页

iocharset=XXX
字符集

ro
以只读方式挂载

rw
以读写方式挂载

nouser
使一般用户无法挂载

user
可以让一般用户挂载设备

安装GDBQtCreator的环境配置

注:Qt的版本所导致的是在工程连接的时候,Qt的库文件内部的出错。

1、 apt-get install gdb:安装gdb

2gdb

六、火狐插件的要求

1Windows要求

plugins必须满足以下条件才能被firefox检测到:

插件的名字必须是np*.dll,也就是必须以np开头,.dll结尾

插件dll资源的语言必须为LANG_ENGLISHcode page必须为1252。在rc文件里是这么写的:

 

//-------------------------------------------

LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)

//------------------------------------------------------------------------

 

插件dllVERSION_INFO里面必须包含以下值:

 

//-------------------------------------------

VALUE "MIMEType", "application/x-your-mimetype"

//-------------------------------------------

 

这个MIME就是<object>标签引用插件的唯一凭证。

2Linux要求

plugins必须满足以下条件才能被检测到:

插件的名字必须是lib*plugin.so,即以lib开头,plugin.so结尾

插件必须实现NP_GetMIMEDescriptionNP_GetPluginVersion,并返回合适MIME字符串。注意,这个字符串并不是普通的MIME,是有特殊规则的,详见前面这个链接的内容。

插件so不要静态链接gtkopensllpthreadz等系统库,这会在不同linux平台上因为符号表的问题遇到各种运行时错误

特别需要说明的是,NP_GetPluginVersionNP_GetEntryPoints等关键函数没有任何官方文档介绍它们,只能根据例子来猜,反正没事就别改它们的实现,copy例子中的代码就好。

VM虚拟机可以使得外部属于与里面的数据进行交互。

Makefile中的$的用处就是取某一个Makefile里面定义的变量的值。

第二部分:Linux下火狐插件的编译

 

一、Linux下普通Plugin的编译

 Linux下编译普通的Firefox Plugins,我是采用G++来编译。(注意:GCC可以编译.c文件但是GCC不能编译.cpp.h文件),现在来编译一下一个Firefox官网上的一个例子(官网的例子有错误需要修改)。

第一步:需要下载编译用的库文件。(我下载的是Firefox3.5的版本)

注:这个地方下载的文件是为了后面编译要用的。通过G++连接库文件

第二步:可以从官方网站上下来例子来编译。

注:下载只需要下载所有的.cpp文件和.h文件,但是有错,可以参考我编辑的例子

第三步:使用终端开始编译如下所示:

注:红色的为解释语句。

root:~# g++ -I xulrunner/include -I xulrunner/include/java -I xulrunner/include/nspr -I xulrunner/include/plugin -shared -o libnprt.so np_entry.cpp npp_gate.cpp npn_gate.cpp plugin.cpp plugin.h resource.h

输出到此处为止。

-o代表输出结果

-shared代表编辑成为共享文件。(就是.so对应着windows下的.dll

Xulrunner是一个文件夹用来放火狐插件SDK的文件夹

以下为编辑的编译输出结果。

npp_gate.cpp: In function鈥榗har* NPP_GetMIMEDescription()?

npp_gate.cpp:48: warning: deprecated conversion from string constant to鈥榗har*?npp_gate.cpp: In function鈥楴PError NPP_GetValue(NPP_t*, NPPVariable, void*)?

npp_gate.cpp:169: warning: deprecated conversion from string constant to鈥榗har*?npp_gate.cpp:172: warning: deprecated conversion from string constant to鈥榗har*?plugin.cpp:123:80: warning: backslash and newline separated by space

plugin.cpp:124:80: warning: backslash and newline separated by space

plugin.cpp:125:80: warning: backslash and newline separated by space

plugin.cpp:126:80: warning: backslash and newline separated by space

plugin.cpp:127:80: warning: backslash and newline separated by space

plugin.cpp:128:80: warning: backslash and newline separated by space

plugin.cpp:129:80: warning: backslash and newline separated by space

plugin.cpp:130:80: warning: backslash and newline separated by space

plugin.cpp:131:80: warning: backslash and newline separated by space

plugin.cpp:132:80: warning: backslash and newline separated by space

plugin.cpp:133:80: warning: backslash and newline separated by space

plugin.cpp:134:80: warning: backslash and newline separated by space

plugin.cpp:135:80: warning: backslash and newline separated by space

plugin.cpp:136:80: warning: backslash and newline separated by space

plugin.cpp:137:80: warning: backslash and newline separated by space

结果将会在cpp所在的目录生成需要生成的共享文件,然后把它拷贝到usr/lib/iceweasel/plugins目录下。重新启动iceweasel输入aboutplugins可以再所得的列表中找到我们生成的.so

 

g++ -I qt/include qtbrowserplugin/src qt/src/gui qtbrowserplugin/examples/trivial/trivial.cpp qtbrowserplugin/src/qtbrowserplugin.cpp qtbrowserplugin/src/qtbrowserplugin_x11.cpp -fPIC -share -o libtrivial.so

 

-I qt/include -I qt/include/QtGui -I qtbrowserplugin/src/ -I qt/src/gui/accessible/ -I qt/src/gui/widgets

二、QtLinux下编译

可以在/etc/profile内在尾部增加这些路径

:查看系统的路径可以使用-env来查看

export QT2DIR=/root/qt

export $QT2DIR

export QTDIR=$QT2DIR

export PATH=$QT2DIR/bin:$PATH

export LD_LIBRARY_PATH=$QT2DIR/lib:$LD_LIBRARY_PATH

echo yes|./configure -no -xft -platform linux-g++

./configure

Make

Make install

三、LinuxQtCreator编译程序

注:QtCreator的启动文件在/opt/QtCreator

Linux下程序对于大小写非常铭敏感,比如说你引入一个文件,你的文件名就必须与在代码中引入的大小写一致,这样才能够通过编译器的编译。因为在Linux-g++编译器下都是先通过寻找代码标识来找到这个文件,所以大小写不对是找不到这个文件的。因为在linux文件系统中大小写不同对应的是不同的文件。

常用的文件格式记录:

.c C源程序预处理,编译,汇编

.C C++源程序预处理,编译,汇编

.cc C++源程序  

.cxx C++源程序预处理,编译,汇编

.m Objective-C源程序 预处理,编译,汇编

.i 预处理后的C文件  编译,汇编

.ii 预处理后的C++文件 编译,汇编

.s 汇编语言源程序 汇编

.h 预处理器文件  通常不出现在命令行上

常用的编译指令记录:

-E该选项的作用是让Gcc/G++在预处理结束后停止编译过程

-S该选项只进行编译而不进行汇编,生成汇编代码

Linux上面

三、LinuxQt编译原理

1、 qt中的*.qrc文件就像*.rc文件,保存这种资源文件的信息。在*.pro文件中加RESOURCES=****.qrc;mainApplication a(argc,argv)下面加上Q_INIT_RESOURCE(***.qrc)

qrc中的ToolBoxPhysicsElectromagenticsCoilUp.png找不到

ToolBoxPhysicsElectromagenticsMagneticFieldRight.png找不到

ToolBoxPhysicsElectromagenticsMagneticFieldUp.png找不到

2、 SOURCES:指定源文件

SOURCES += ***.CPP/

                ***.CPP/

HEADERS:指定头文件

HEADERS += ***.h/

                     ***.h/

3、 CONFIG:用来告诉qmake关于应用程序的配置信息

CONFIG += qt warn_off debug

qt:表示qmake要用Qt来连接编译

warn_outqmake要输出警告信息

release(debug)qmake要连接编译为一个发布版(编译版)

4、 TARGET:指定目标文件名(生成的文件名)

TARGET = FILENAME

注:此处如果不设定,系统默认会将这个选项设置为与工程同名

5、 INTERFACES:指定界面文件

INTERFACES = FILENAME.ui

6、 操作平台处理

win32{******}:qmakewindows上就会运行这个大括号里面的内容。

7、 文件存在性问题

Exists(***){****}:qmake会去判断exists(****)括号内的文件是否存在

8、 error()函数使得qmake停下来

*.pro中出现error(****)如果编译的过程中触发了

9、 TAMPLATE:指定给qmake便已成为什么类型的Makefile

app -建立一个应用程序的makefile(默认值)

lib - 建立一个库的makefile

vcapp - 建立一个应用程序的Visual Studio项目文件

vclib - 建立一个库的Visual Studio项目文件

subdirs - 这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用makemakefile

10 RESOURCE:制定工程所包含的资源文件

        windows下用vs编译的Qt资源文件是*.rc

        Linux下用G++编译的Qt资源文件是*.qrc

11 CODECFORSRS:指定源文件的编码方式

        CODECFORSRS = GBK

12 OBJECT_DIR:指定目标文件的存放路径

        OBJECT_DIR += ****/****

13 MOC_DIR:指定moc文件将Q_OBJECT文件标准的头文件存放的目录

        MOC_DIR += ***/***

14 DESTDIR:指定所生成的文件的存放目录

        DESTDIR +=***/***

15 UI_DIR:指定uic命令将*.ui文件转化为UI_*.h文件存放的目录

        UI_DIR += ***

16 INCLUDEPATH:指定头文件包含的路径

        INCLUDEPATH += ***

17$$(PATH):标示去读PATH的内容

CPUID.c文件理解

        CPU通过cpuid指令来取得CPU的相关信息。因为从386以后的cpu采用的四个cpu的寄存器EDXECXEBXEAX(EAH EAL AH,AL)每一个大小为一个WORD的大小。在CPU的位寄存器EFLAG的第21位的功能是用于判断是否支持CPUID的指令。