gcc -O1 -o p p1.c p2.c
首先, c预编译器使用cpp扩展里面的 #define
使用cc1将上面生成的.i文件生成.s文件。
cc1 /tmp/main.i -Og [other argument] -o /tmp/main.s
as -o /tmp/p1.o /tmp/p1.s
ld -o prog /tmp/p1.o /tmp/p2.o
./prog
这个命令会激活一个loader(加载器),将第四步产生的可执行二进制文件的代码和数据加载到内存中去。
为了建立可执行文件,链接器必须执行两个任务:
这里需要记住的就是,linker所面对的只是一些指令,这些指令彼此毫不相干,另外,链接器需要对目标机器有一个最小化的认识。
这个词语的中文可以翻译为目标文件,主要有3种形式:
目标文件有这么几种格式: a.out来自于bell实验室。windows使用pe格式(portable Executable) , mac 使用Mach-O格式。x86和一些现代的机器清一色使用的是ELF(Executable and linkable Format)
objdump和gdb xx的命令
在程序里必须注意数据在获取和转移的过程中数据编码的问题。perl的模块Encode 的处理模块可以很好的处理这个问题。
结果 = encode(编码方式a,要编码的字串);
结果 = decode(编码方式b,要编码的字串)
encode是按编码方式a,decode是以编码方式b解码。
TODO…
NAT就是虚拟机里的东西全部由主机来管理,你可以在虚拟机里访问主机,但是反过来 就不行。所以,你想在主机上访问虚拟机的ssh,需要特别的处理。
这时产生的虚拟机的ip一般为10.0.2.15
其实,就是在主机上的nat的网络连接方式增加端口转发规则。
Name: SSH (可以是任意唯一名)
Protocol: TCP
Host IP: 127.0.0.1
Host Port: 2222 (任何大于1024未使用的端口)
Guest IP: 虚拟机IP
Guest Port: 22 (SSH 端口)
这时你就可以使用127.0.0.1:2222的方式访问虚拟机里的ssh了。
这一种是比较落后的
sudo apt-get install gcc make binutils gawk x11-utils rpm build-essential
libaio1 libaio-dev libmotif4 libtool expat alien ksh pdksh unixODBC
unixODBC-dev sysstat elfutils libelf-dev binutils lsb-cxx libstdc++5
libmotif4 libmotif-common libstdc++5 libmotif-dev expat pdksh sysstat
libtool libmotif4 pcb-lesstif libdb4.6
没有lesstif2 用 pcb-lesstif代替,libaio1不要用这个上面的,我自己是下的源 包,而且版本是0.3.109
在安装过程中,看到提示缺少某个库函数的时候,不要简单的中断退出来,根据问题 的提示,利用google解决后,再retry下。
说明:在代码块中你可以看见”","“在开始和结尾处,这是一个shell文件,
在debian上,
直接使用:
sh xx.sh
就可以使用了。当然,如果你想用手输入的话,找到对应的系统文件,敲进去就是了 。
相关脚本放在了这里
#!/bin/bash
`
groupadd oinstall;
groupadd dba;
groupadd oper;
useradd -m -s /bin/bash -g oinstall -G dba,oper oracle; #初始群组为 oinstall,有效群组为 dba、oper
passwd oracle;
`
这里一定要有”-m”选项,否则在你安装的过程中以oracle用户无法登入系统。 “-s”是 指定该用户使用的shell,在debian上,当然是bash了。
#!/bin/bash
echo "#">> /etc/sysctl.conf
echo "# Oracle 11gR2 entries">> /etc/sysctl.conf
echo "fs.aio-max-nr=1048576" >> /etc/sysctl.conf
echo "fs.file-max=6815744" >> /etc/sysctl.conf
echo "kernel.shmall=2097152" >> /etc/sysctl.conf
echo "kernel.shmmni=4096" >> /etc/sysctl.conf
echo "kernel.sem=250 32000 100 128" >> /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range=9000 65500" >> /etc/sysctl.conf
echo "net.core.rmem_default=262144" >> /etc/sysctl.conf
echo "net.core.rmem_max=4194304" >> /etc/sysctl.conf
echo "net.core.wmem_default=262144" >> /etc/sysctl.conf
echo "net.core.wmem_max=1048586" >> /etc/sysctl.conf
echo "kernel.shmmax=1073741824" >> /etc/sysctl.conf
sysctl -p
注意最后一个命令,这里是立即生效刚刚修改过的系统文件。同样,该命令我也放在了 脚本中,请注意。 在安装的过程中,有一步是检查所有的先决条件是否满足,有一个地方会说
kernel.sem fixable
我在别的地方看见说这个警告没有影响,直到现在,我也是忽略它了,不知道有没有风 险。
apt-get install bzip2
apt-get install linux-headers-
uname -rbuild-essential
必须有这两个,否则很容易不成功。
在VitualBox自带的安装包内这个iso文件一直存在着。我们只需将它安装上即可。 在虚拟机里,这里有两种安装方式命令行和图形界面。
命令行的请参考这篇文章here 唯一的坏处就是无法自动挂载。
mount /dev/cdrom /media/cdrom
cd /media/cdrom0
或者到/media/cdrom中去查看
首先在VitualBox的”设备”里的”安装增强型”,然后”xx.iso”文件就加在了桌面上。然 后命令行进入
/media/cdrom0
使用脚本
sh xxx.sh
就安装上了。最后重启。
在虚拟机的设置里有个共享文件夹的设置,选择你想要共享的文件夹,然后选择下面的 两个选项:”自动挂载”和”临时分配”。
sudo mkdir /mnt/shared
sudo mount -t vboxsf share /mnt/shared
这里的”share”就是共享文件夹的名字。
为了不能每次手动加载,可以使用脚本/etc/fstab
share /mnt/shared vboxsf rw, gid=username,uid=username,auto 0 0
还可以在 /etc/rc.local加入
mount -t vboxsf share /mnt/shared
umount -f /mnt/shared