Linux源代码软件安装,Linux软件安装:源代码与软件安装
歡迎進(jìn)入Linux社區(qū)論壇,與200萬(wàn)技術(shù)人員互動(dòng)交流 >>進(jìn)入 Linux軟件安裝:源代碼與軟件安裝 1 開(kāi)源軟件的一些基本概念 1.1 什么是開(kāi)放源碼,編譯程序與可執(zhí)行文件 可執(zhí)行文件 Linux上真正可以執(zhí)行的文件是二進(jìn)制文件,例如/usr/bin/passwd,/bin/touch shell
歡迎進(jìn)入Linux社區(qū)論壇,與200萬(wàn)技術(shù)人員互動(dòng)交流 >>進(jìn)入
Linux軟件安裝:源代碼與軟件安裝
1 開(kāi)源軟件的一些基本概念
1.1 什么是開(kāi)放源碼,編譯程序與可執(zhí)行文件
可執(zhí)行文件
Linux上真正可以執(zhí)行的文件是二進(jìn)制文件,例如/usr/bin/passwd,/bin/touch
shell script只是調(diào)用這些二進(jìn)制文件,完成某種功能
可以用file命令檢驗(yàn)文件類型
$ file /bin/bash
/bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked (uses shared libs),
for GNU/Linux 2.6.24, BuildID[sha1]=0xf199a4a89ac968c2e0e99f2410600b9d7e995187, stripped
$ file /etc/init.d/rc
/etc/init.d/rc: POSIX shell script, ASCII text executable
編譯程序
這些可以執(zhí)行的二進(jìn)制文件是哪兒來(lái)的呢?首先,必須要寫程序的源代碼,然后,由編譯程序?qū)⒊绦虻脑创a 編譯成二進(jìn)制形式。源代碼是由程序員編寫的,使用特定的程序語(yǔ)言,如C,C++,Java,Python.但是機(jī)器看不懂 這些語(yǔ)言,所以要使用編譯程序?qū)⑦@些語(yǔ)言編寫的源代碼編譯成機(jī)器可以看懂的二進(jìn)制文件。如C語(yǔ)言常用的編譯器 為gcc.
1.2 什么是函數(shù)庫(kù)
函數(shù)庫(kù)由一系列函數(shù)組成,每一個(gè)函數(shù)都是一個(gè)代碼片段,完成特定的功能,這樣我們使用一些常用功能時(shí),就不必 自己重新編寫代碼,只需要調(diào)用函數(shù)庫(kù)里的函數(shù)就可以了。函數(shù)庫(kù)分為靜態(tài)函數(shù)庫(kù)和動(dòng)態(tài)函數(shù)庫(kù)。
靜態(tài)函數(shù)庫(kù)
擴(kuò)展名:.a
編譯時(shí)會(huì)直接編譯到二進(jìn)制文件中,所以生成的文件通常比較大,升級(jí)時(shí)需要重新編譯
動(dòng)態(tài)函數(shù)庫(kù)
擴(kuò)展名:.so
編譯時(shí)不會(huì)直接編譯到二進(jìn)制文件中,只是給出一個(gè)路徑,指向相應(yīng)函數(shù)庫(kù),程序執(zhí)行調(diào)用時(shí)動(dòng)態(tài)地向此路徑讀取, 升級(jí)時(shí),只需要替換原路徑中的動(dòng)態(tài)函數(shù)庫(kù)就可以了,不需要重新編譯
使用ldd命令可以知道程序使用了哪些動(dòng)態(tài)函數(shù)庫(kù)
$ ldd /usr/bin/passwd
linux-gate.so.1 =>? (0xb7784000)
libpam.so.0 => /lib/i386-linux-gnu/libpam.so.0 (0xb775c000)
libpam_misc.so.0 => /lib/i386-linux-gnu/libpam_misc.so.0 (0xb7758000)
libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0xb7738000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb758e000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb7589000)
/lib/ld-linux.so.2 (0xb7785000)
1.3 什么是 make 與 configure
當(dāng)程序的文件數(shù)目非常大時(shí),直接使用gcc編譯會(huì)變得非常麻煩,這時(shí),我們可以寫一個(gè)文件,定義好如何編譯整個(gè)程序, 這個(gè)文件即是makefile,然后再調(diào)用make命令,make命令會(huì)使用makefile完成編譯。那么makefile如何產(chǎn)生呢,通常軟件 提供者都會(huì)提供一個(gè)configure程序,用于檢測(cè)機(jī)器環(huán)境,生成makefile.檢測(cè)的內(nèi)容包括是否有合適的編譯器,是否存在 需要的函數(shù)庫(kù),操作系統(tǒng)版本是否合適等等。
2 C語(yǔ)言編譯簡(jiǎn)單范例
使用vim編寫兩個(gè)程序源代碼
#include
int main(void) {
thankYou();
printf ("hello,world\n");
return 0;
}
#include
void thankYou()
{
printf ("Thank you\n");
}
使用gcc編譯 這一步,源代碼文件被編譯成為目標(biāo)文件
$ gcc -c hello.c -o hello.o
$ gcc -c thank.c -o thank.o
使用gcc鏈接 通過(guò)鏈接,我們可以將函數(shù)庫(kù)中已經(jīng)編譯好的目標(biāo)文件與我們自己編寫生成的目標(biāo)文件鏈接在一起,成為 一個(gè)最終的二進(jìn)制文件
$ gcc hello.o thank.o -o hi
執(zhí)行
$ ./hi
Thank you
hello,world
注意
可以使用 -l指定函數(shù)庫(kù),-L指定函數(shù)庫(kù)路徑,-I指定頭文件路徑
gcc sin.c -lm -L/lib -L/usr/lib -I/usr/include
上面的-l指加入函數(shù)庫(kù),m指的是libm.so這個(gè)函數(shù)庫(kù)
[1]?[2]
總結(jié)
以上是生活随笔為你收集整理的Linux源代码软件安装,Linux软件安装:源代码与软件安装的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 简易linux修改ip,让Linux修改
- 下一篇: clear linux 图形界面,Cle