成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 程序員眼里的 Gcc

開發(fā)
本文是編譯、靜態(tài)庫制作、動態(tài)庫制作的過程,先記住這些 gcc 的基本常識,再去研究原理吧!

作為一名 Java 程序員,對 gcc 的基本使用總是記不住,很不熟練,今天寫篇文章用最簡單的方式記錄下。

編譯的過程

寫個 hello.c 代碼:

#include <stdio.h>
#define STR "hello world\n"

void main() {
printf(STR);
}

第一步:預處理(preprocess)

其實就是以下三個動作:

  • 頭文件展開
  • 宏定義直接替換
  • 條件編譯不成立就去掉
gcc -E hello.c -o hello.i

第二步:編譯(compile)

轉(zhuǎn)換成匯編語言:

gcc -S hello.i -o hello.s

第三步:匯編(assemble)

轉(zhuǎn)換成二進制(ELF relocatable):

gcc -c hello.s -o hello.o

第四步:鏈接(link)

具體分為動態(tài)鏈接和靜態(tài)鏈接:

# 動態(tài)鏈接
gcc hello.o -o hello
# 靜態(tài)鏈接
gcc hello.o -o hello -static

靜態(tài)庫制作

寫一個加法函數(shù):

int add(int a, int b) {
return a+b;
}

編譯成 .o:

gcc -c add.c -o add.o

制作成靜態(tài)庫:

ar rcs libadd.a add.o

編寫測試代碼:

#include <stdio.h>
void main(){
printf("%d", add(1,2));
}

編譯成可執(zhí)行文件:

#寫法一
gcc test.c -o test libadd.a
#寫法二
gcc test.c -o test -static -ladd -L ./

執(zhí)行:

./test
3

動態(tài)庫制作

寫一個加法函數(shù):

int add(int a, int b) {
return a+b;
}

編譯成 .o:

gcc -c add.c -o add.o -fPIC

制作成動態(tài)庫:

gcc -shared -o libadd.so add.o

上面兩步也可以直接從源文件一步到位:

gcc -fPIC -shared -o libadd.so add.c

編寫測試代碼:

#include <stdio.h>
void main(){
printf("%d", add(1,2));
}

編譯成可執(zhí)行文件:

gcc test.c -o test -ladd -L ./

執(zhí)行發(fā)現(xiàn)報錯:

./test
error while loading shared libraries: libadd.so:
cannot open shared object file: No such file or directory

因為執(zhí)行的時候找不到指定的動態(tài)庫。

那我們把 libadd.so 放在執(zhí)行時的動態(tài)庫默認搜索路徑下,比如 /lib64:

cp libadd.so /lib64

再次執(zhí)行就成功了:

./test
3

查看二進制文件的鏈接信息,也可以發(fā)現(xiàn)我們的 libadd.so 生效了:

ldd test
linux-vdso.so.1 => (0x00007ffe0f597000)
libadd.so => /lib64/libadd.so (0x00007fa5ab29f000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa5aaed1000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa5ab4a1000)

好了,以上就是編譯、靜態(tài)庫制作、動態(tài)庫制作的過程,先記住這些 gcc 的基本常識,再去研究原理吧!

責任編輯:趙寧寧 來源: 低并發(fā)編程
相關推薦

2011-03-01 09:52:48

人才程序員

2013-08-16 09:30:18

IE瀏覽器

2013-08-16 10:03:27

程序員IE瀏覽器

2013-08-20 09:33:59

程序員

2017-06-28 14:07:49

2012-11-08 09:49:30

C++Java程序員

2014-07-14 10:05:23

程序員軟件開發(fā)

2012-11-02 13:47:31

Java程序員編程

2014-07-29 10:30:16

JavaJava程序員

2011-05-13 14:34:02

程序員

2018-01-29 10:00:59

2012-11-22 14:00:26

程序員

2017-11-14 21:30:15

2012-03-06 09:22:46

程序員

2012-06-23 17:21:18

程序員

2009-12-14 09:29:00

程序員

2010-08-27 10:34:51

程序員

2012-02-14 09:13:51

程序員

2012-03-13 10:55:00

程序員

2015-09-24 08:43:13

程序員未來
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品视频在线看 | 国产精品美女在线观看 | 成人精品视频免费 | 欧美在线一区二区三区 | 欧美一级欧美三级在线观看 | 亚洲一区二区三区久久 | 午夜影院在线观看 | av三级在线观看 | 91精品国产91久久久久久最新 | 91欧美激情一区二区三区成人 | 久久国产精品免费视频 | 亚洲一区二区三区在线 | 黄色网址在线播放 | 久久人人网 | 欧美精品欧美精品系列 | 亚洲 欧美 在线 一区 | 欧美一区不卡 | 免费在线观看一区二区三区 | 国产综合视频 | 黑人巨大精品欧美一区二区免费 | 精品久久久久久亚洲国产800 | .国产精品成人自产拍在线观看6 | 久草www | 操操网站 | 精品国产一区久久 | 久久精品99久久 | 亚洲国产精品久久久久 | 国产欧美一区二区三区国产幕精品 | 最近中文字幕免费 | 精品国产91 | 精品亚洲一区二区 | 97精品一区二区 | 最新午夜综合福利视频 | 91av在线视频观看 | 超碰97干| 欧美自拍一区 | 一区视频在线免费观看 | 欧美日韩精品在线免费观看 | 国产一区二区精品自拍 | 久久久久一区二区 | 国产精品久久久久久久久久免费看 |