第一部分:环境设置与系统指令
一、VMWare 上安装Debian系统。主机为xp系统 (此处安装的Debian为32位的系统)
虚拟机的网络配置方法如下:
设置主机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 package ‘libgnomeui-2.0′ found
No package ‘gtk+-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-cmd 是Linux下vmware的安装目录
五、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 可以让一般用户挂载设备
安装GDB与QtCreator的环境配置
注:Qt的版本所导致的是在工程连接的时候,Qt的库文件内部的出错。
1、 apt-get install gdb:安装gdb
2、gdb在
六、火狐插件的要求
1、Windows要求
plugins必须满足以下条件才能被firefox检测到:
插件的名字必须是np*.dll,也就是必须以np开头,.dll结尾
插件dll资源的语言必须为LANG_ENGLISH,code page必须为1252。在rc文件里是这么写的:
//-------------------------------------------
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
//------------------------------------------------------------------------
插件dll的VERSION_INFO里面必须包含以下值:
//-------------------------------------------
VALUE "MIMEType", "application/x-your-mimetype"
//-------------------------------------------
这个MIME就是<object>标签引用插件的唯一凭证。
2、Linux要求
plugins必须满足以下条件才能被检测到:
插件的名字必须是lib*plugin.so,即以lib开头,plugin.so结尾
插件必须实现NP_GetMIMEDescription和NP_GetPluginVersion,并返回合适MIME字符串。注意,这个字符串并不是普通的MIME,是有特殊规则的,详见前面这个链接的内容。
插件so不要静态链接gtk、opensll、pthread、z等系统库,这会在不同linux平台上因为符号表的问题遇到各种运行时错误
特别需要说明的是,NP_GetPluginVersion、NP_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输入about:plugins可以再所得的列表中找到我们生成的.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
二、Qt在Linux下编译
可以在/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
三、Linux下QtCreator编译程序
注: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上面
三、Linux下Qt编译原理
1、 qt中的*.qrc文件就像*.rc文件,保存这种资源文件的信息。在*.pro文件中加RESOURCES=****.qrc;在main中Application 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_out:qmake要输出警告信息
release(debug):qmake要连接编译为一个发布版(编译版)
4、 TARGET:指定目标文件名(生成的文件名)
TARGET = FILENAME
注:此处如果不设定,系统默认会将这个选项设置为与工程同名
5、 INTERFACES:指定界面文件
INTERFACES = FILENAME.ui
6、 操作平台处理
win32{******}:qmake在windows上就会运行这个大括号里面的内容。
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并且为它调用make的makefile
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的寄存器EDX、ECX、EBX、EAX(EAH EAL AH,AL)每一个大小为一个WORD的大小。在CPU的位寄存器EFLAG的第21位的功能是用于判断是否支持CPUID的指令。