linux编译的程序如何转移到别的linux系统 (满意追加50)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux编译的程序如何转移到别的linux系统 (满意追加50)相关的知识,希望对你有一定的参考价值。

我有一个网关是linux系统的。可是上面没有编译环境我想在上面安装一个tcpdump怎么弄。
主要是网关上面没有编译环境。。gcc和make都没用。
网关系统信息:Linux version 2.6.24.5 (gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)) #49 SMP Wed Jan 26 15:05:06 CST 2011
网关cpu信息:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 14
model name : Intel(R) Celeron(R) M CPU 420 @ 1.60GHz
stepping : 8
cpu MHz : 1600.118
cache size : 1024 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe nx constant_tsc up arch_perfmon bts pni monitor tm2 xtpr
bogomips : 3203.50
clflush size : 64

我该怎么样才能编译一个可以用的tcpdump上去。环境该怎么搭建。

1、使用rpm包进行安装;
优点是不需要另外的编译机,缺点是要安装其他的依赖包。
2、使用源码编译生成安装包;
优点是在目标机器可以直接使用编译结果,缺点是需要额外的机器
找一个内核与发布版本都与你的网关Linux相同的机器,上传你要编译的源码,一般官网提供的是xxx.tar.gz。按照下面步骤操作:
a、解压;
b、执行configure;
c、make;
d、make install
e、把install目录中的文件打包到目标机器解压;
f、在bin或者sbin等目录创建软链接到目标机器安装目录的bin目录下的二进制文件;

下面的例子是把openssl安装在opt/openssl目录下:
tar -zxf openssl-0.9.8y.tar.gz
cd openssl-0.9.8y/
./config shared threads --prefix=/opt/openssl
make
make install
执行完上面的命令,就会把openssl安装在编译机的/opt/openssl目录下,接下来只需要把/opt/openssl里面的内容拷贝到你的网关Linux机器即可,记得要在添加/opt/openssl/bin到环境变量PATH里面或者在/usr/bin目录创建软链接到/opt/openssl/bin下的二进制文件。追问

没有rpm。。。

内核和发布版本应该可以找的到。但是网关的系统肯定是修改过的。。。
另外,那支持库怎么办。我不知道服务器上面会不会缺少库。
软件会对内核和版本有需求么?

追答

不一致影响也不大。如果缺少运行库,configure和make的时候会有提示的。
你用的是什么发布版,一般没有rpm也会有其他的包啊。

追问

那个应该不是发布版本,网关是买来的。应该是定制的系统。所以我在想,支持库编译好能不能也上传?
貌似是用busybox定制的。

追答

定制的也不影响你是用源代码生成,所有需要的库在编译机上编译的时候都会提示你的

参考技术A 你上面提供的信息可以看出:你的网关应该是一台装了 Linux 的PC机,现在你要做的就是编译一个c语言开发的系统放上去运行。只说了你的 Linux 内核是 2.6.24.5 版的,并没有说整个系统所用的是哪种发行版的Linux,Debian系列(Debian、Ubuntu、Mint等)与红帽子系列(RHEL、CentOS、Federo、Oracle、红旗等)的软件安装命令是完全不同的,如果是Debian系列的,你就可以用 apt-get install build-essential 命令来安装(需要 root 身份和连了 Internet 的环境),如果是红帽子系列则需要你自己从网上搜索下载各个软件包下载到自己的电脑(网关)中来再安装。
实际上,所谓“编译环境”主要就是 make、gcc、glibc 三个包,你可以从网上下载这三个包的源程序下来到自己的电脑(已经有编译环境的、不是那个网关)里来自己编译安装到自己另外指定的目录里,然后再整个目录复制到网关恰当的目录上去。不过,这样做需要注意make、gcc、glibc 三个包的版本配套问题,版本搭配不正确容易产生各种问题。这种做法你需要学习掌握 CLFS 相关知识。
当然,你还可以考虑根本就不理网关上没有编译系统的问题,在自己的已经有编译系统的电脑上编译 tcpdump 源代码生成适合于网关上安装的软件包来使用。把源代码编译生成某种软件包的方法应该在 tcpdump 源代码的根目录下有说明的,你查看一下该目录下名为 README、INSTALL的文件或子目录,里面应该有教你安装的方法。追问

gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
这个Ubuntu是什么情况。。

追答

这是说明你的网关已经安装了 Ubuntu 团队优化过的 gcc 4.2.3,作为一个编译环境,光有它是不够了,至少还得有 make 、glibc 这些包。

追问

可是gcc命令怎么没用?那怎么办?上传上去么

追答

如果你的网关装的是Debian系列的Linux,你就可以用 apt-get install build-essential 命令来安装编译环境。

追问

# apt-get

-sh: apt-get: not found

追答

这说明你的网关运行的不是 Debian 系列的 Linux,你需要采用红帽子系列的的安装方法来安装了。前面已经说过该方法。

追问

可惜里面没见到编译器啊。。那个应该是用busybox 定制的

追答

另外找一台电脑来交叉编译吧

参考技术B tcpdump就是个纯软件的东西,不涉及硬件,而且你这个事X86的,直接去ubuntu的官网上下载个.deb包,然后放到服务器上,直接dpkg -i 安装上就可以了追问

啊?=。=那支持库那些呢。怎么上传

追答

下个.deb的包就可以用

追问

没有dpkg命令。

追答

PC板的Ubuntu上在/usr/sbin下有tcpdump。
ldd /usr/sbin/tcpdump查看了下,大体依赖
linux-gate.so.1 => (0xb7762000)
libcrypto.so.1.0.0 => /lib/i386-linux-gnu/libcrypto.so.1.0.0 (0xb740e000)
libpcap.so.0.8 => /usr/lib/i386-linux-gnu/libpcap.so.0.8 (0xb73d7000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb722d000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb7228000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb7212000)
/lib/ld-linux.so.2 (0xb7763000)
要是你的服务器上有这些包的话,把Pc上的tcpdump考到服务器上试试看,要不就从源码编译下看看,虽说是Ubuntu修改过的gcc,应该差不多能用

追问

我试试看可不可以

参考技术C 这个网关可以安装软件不,不可以很麻烦的。真想了解,去看下LFS资料追问

不可以,apt-get rpm 那些命令都没用

追答

安装软件的方法很多的,最靠谱,你可以自己编译。楼下说得很详细了,缺什么安装什么

实验五 Linux操作系统是如何工作的

参考技术A 操作系统工作的基础:
1、存储程序计算机
冯.诺伊曼首先提出了“存储程序”的概念,按照存储程序的原理,计算机在执行程序时须先将要执行的相关程序和数据放入内存储器中,在执行程序时CPU根据当前程序指针寄存器的内容,按地址顺序取出存放在内存储器中的指令(按地址顺序访问指令),然后分析指令,执行指令的功能,遇到转移指令时,则转移到转移地址,再按地址顺序访问指令(程序控制)。linux操作系统就是以存储程序计算机的工作原理为基础去管理整个计算机以及整个计算机的执行工作流程。

存储程序计算机以运算单元为中心, 采用存储程序原理,存储器是按地址访问、线性编址的空间,控制流由指令流产生, 指令由操作码和地址码组成,数据以二进制编码。(维基百科)

2、堆栈
堆栈(此处不同于数据结构的中堆栈)是内存中的一段存储区域。堆栈用到的寄存器主要有%esp和%ebp,c语言中堆栈机制主要用于函数调用中上一层函数相关寄存器(包括堆栈相关寄存器,eip寄存器等)的保存,以便从调用函数返回至上一层函数,堆栈还会保存调用函数的参数以及函数中创建的局部变量。
操作系统中的堆栈分为用户态堆栈和内核态堆栈,而程序的执行又是以进程为单位来执行的,操作系统使每个进程有各自独立的4G地址空间,0~3G为用户态,3G~4G为内核态,Linux为每个进程分配一个8KB大小的内存区域,用于存放该进程两个不同的数据结构:Thread_info和进程内核堆栈。当我们进行系统调用或其他中断时内核栈会保存用户栈的寄存器信息以及返回地址等信息,当内核进行进程调度切换上下文时堆栈会保存前一个进程的上下文,再载入下一进程的上下文。

3、中断
中断机制最初是未解决计算机和外设的处理速度不匹配问题,为了提高cpu的工作效率,操作系统引入中断机制。
处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求,然后专门等待回应的办法,显然降低内核效率。中断可以让内核不用等待硬件响应,而是去执行其他事务进程,当硬件处理完毕,通过中断告知CPU硬件数据准备好,CPU再切换来处理此硬件事务。
不同的设备对应的中断不同,而每个中断都通过一个惟一的数字标识,即中断号。从而使得操作系统能够对中断进行区分,并知道哪个硬件设备产生了哪个中断。这样,操作系统才能给不同的中断提供不同的中断处理程序。
中断使得进程能够并发的去执行,当然,并发并不是并行,而是中断允许CPU在多个进程之间切换,大大提高了CPU的利用率。中断是多进程能够正常执行以及进程间的切换的必不可少的要素。

以上是关于linux编译的程序如何转移到别的linux系统 (满意追加50)的主要内容,如果未能解决你的问题,请参考以下文章

如何将Linux系统转移至LVM卷

win7平台下编译的JAVA程序能在linux系统下运行么

Linux—-软件安装

linux系统可不可以克隆到别的电脑

在Linux操作系统下如何开启硬盘DMA

系统知识点linux软件安装编译