Linux源代码软件安装,Linux软件安装:源代码与软件安装
歡迎進入Linux社區論壇,與200萬技術人員互動交流 >>進入 Linux軟件安裝:源代碼與軟件安裝 1 開源軟件的一些基本概念 1.1 什么是開放源碼,編譯程序與可執行文件 可執行文件 Linux上真正可以執行的文件是二進制文件,例如/usr/bin/passwd,/bin/touch shell
歡迎進入Linux社區論壇,與200萬技術人員互動交流 >>進入
Linux軟件安裝:源代碼與軟件安裝
1 開源軟件的一些基本概念
1.1 什么是開放源碼,編譯程序與可執行文件
可執行文件
Linux上真正可以執行的文件是二進制文件,例如/usr/bin/passwd,/bin/touch
shell script只是調用這些二進制文件,完成某種功能
可以用file命令檢驗文件類型
$ 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
編譯程序
這些可以執行的二進制文件是哪兒來的呢?首先,必須要寫程序的源代碼,然后,由編譯程序將程序的源代碼 編譯成二進制形式。源代碼是由程序員編寫的,使用特定的程序語言,如C,C++,Java,Python.但是機器看不懂 這些語言,所以要使用編譯程序將這些語言編寫的源代碼編譯成機器可以看懂的二進制文件。如C語言常用的編譯器 為gcc.
1.2 什么是函數庫
函數庫由一系列函數組成,每一個函數都是一個代碼片段,完成特定的功能,這樣我們使用一些常用功能時,就不必 自己重新編寫代碼,只需要調用函數庫里的函數就可以了。函數庫分為靜態函數庫和動態函數庫。
靜態函數庫
擴展名:.a
編譯時會直接編譯到二進制文件中,所以生成的文件通常比較大,升級時需要重新編譯
動態函數庫
擴展名:.so
編譯時不會直接編譯到二進制文件中,只是給出一個路徑,指向相應函數庫,程序執行調用時動態地向此路徑讀取, 升級時,只需要替換原路徑中的動態函數庫就可以了,不需要重新編譯
使用ldd命令可以知道程序使用了哪些動態函數庫
$ 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
當程序的文件數目非常大時,直接使用gcc編譯會變得非常麻煩,這時,我們可以寫一個文件,定義好如何編譯整個程序, 這個文件即是makefile,然后再調用make命令,make命令會使用makefile完成編譯。那么makefile如何產生呢,通常軟件 提供者都會提供一個configure程序,用于檢測機器環境,生成makefile.檢測的內容包括是否有合適的編譯器,是否存在 需要的函數庫,操作系統版本是否合適等等。
2 C語言編譯簡單范例
使用vim編寫兩個程序源代碼
#include
int main(void) {
thankYou();
printf ("hello,world\n");
return 0;
}
#include
void thankYou()
{
printf ("Thank you\n");
}
使用gcc編譯 這一步,源代碼文件被編譯成為目標文件
$ gcc -c hello.c -o hello.o
$ gcc -c thank.c -o thank.o
使用gcc鏈接 通過鏈接,我們可以將函數庫中已經編譯好的目標文件與我們自己編寫生成的目標文件鏈接在一起,成為 一個最終的二進制文件
$ gcc hello.o thank.o -o hi
執行
$ ./hi
Thank you
hello,world
注意
可以使用 -l指定函數庫,-L指定函數庫路徑,-I指定頭文件路徑
gcc sin.c -lm -L/lib -L/usr/lib -I/usr/include
上面的-l指加入函數庫,m指的是libm.so這個函數庫
[1]?[2]
總結
以上是生活随笔為你收集整理的Linux源代码软件安装,Linux软件安装:源代码与软件安装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简易linux修改ip,让Linux修改
- 下一篇: clear linux 图形界面,Cle