麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Linux Shell > 正文

linux鏈接編譯詳解

2020-07-27 19:19:43
字體:
來源:轉載
供稿:網友


為什么要包含頭文件而不是.c文件

測試代碼:

復制代碼 代碼如下:

m.c文件:
#include"t.c"
int main()
{
test();
return 0;
}

編譯:

復制代碼 代碼如下:

gcc m.c -o m -Wall

In file included from m.c:1:0:
t.c: 在函數‘test'中:
t.c:3:2: 警告: 隱式聲明函數‘putchar' [-Wimplicit-function-declaration]
編譯通過,只有一個警告,生成了可執行文件m,運行它正常,輸出一空格。

修改下t.c 文件:

復制代碼 代碼如下:

#include<stdio.h>
void test()
{
       printf("test/n");
}

編譯后執行

輸出:    test

從這可看出,包含.c文件進去對程序并沒造成什么影響,反而比包含.h文件來得直接方便,這里主要考慮到大型項目中,各文件直接的聯系,如A.c文件中包好M.c文件,B.c 文件中包含M.c文件,而A.c文件又包含B.c文件,那么編譯時就會報錯,函數名重定義了。
#include<>與#include""的區別:

對于用角括號包含的頭文件,gcc 首先查找-I選項指定的目錄,然后查找系統的頭文件目錄(通常是/usr/include,在我的系統上還包括/usr/lib/gcc/i486-linux-gnu/4.3.2/include);而對于用引號包含的頭文件,gcc 首先查找包含頭文件的.c文件所在的目錄,然后查找-I選項指定的目錄,最后再查找系統的頭文件目錄。

 
 靜態庫

復制代碼 代碼如下:

/* stack.c */
char stack[512];
int top = -1;

復制代碼 代碼如下:

/* push.c */
extern char stack[512];
extern int top;
void push(char c)
{
stack[++top] = c;
}

復制代碼 代碼如下:

/* pop.c */
extern char stack[512];
extern int top;
char pop(void)
{
return stack[top--];
}

復制代碼 代碼如下:

/* is_empty.c */
extern int top;
int is_empty(void)
{
return top == -1;
}

復制代碼 代碼如下:

/* stack.h */
#ifndef STACK_H
#define STACK_H
extern void push(char);
extern char pop(void);
extern int is_empty(void);
#endif

復制代碼 代碼如下:

/* main.c */
#include <stdio.h>
#include "stack.h"
int main(void)
{
   push('a');
   char c = pop();
   printf("%c/n",c);
   return 0;
}

將如上5個.c文件和一個.h文件放在同目錄下,在當前目錄下新建一Makefile文件,使用Makefile是編譯。

復制代碼 代碼如下:

main:libstack.a main.o
       gcc -o main main.o -L. -lstack
libstack.a: stack.o push.o pop.o is_empty.o
       ar rs libstack.a  stack.o push.o pop.o is_empty.o
stack.o:
       gcc -o stack.o -c stack.c
push.o
       gcc -o push.o -c push.c
pop.o:
       gcc -o pop.o -c pop.c
is_empty:
       gcc -o is_empty.o -c is_empty.c
main.o:
       gcc -o main.o -c main.c

編譯后執行./main
顯示:a

反編譯指令: 查看反編譯后程序

復制代碼 代碼如下:

objdump -d main

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鲁丝一区二区二区四区 | 亚洲骚综合 | 国产91九色视频 | 粉嫩粉嫩一区二区三区在线播放 | 一级大片久久 | 三级国产三级在线 | 国产精品视频一区二区三区四区国 | 综合国产在线 | 午夜看毛片 | av免费提供 | 天天躁狠狠躁夜躁2020挡不住 | 亚洲午夜天堂吃瓜在线 | 精品国产一区二区三区久久久蜜月 | 91丨九色丨国产在线观看 | 色av综合在线 | 精国产品一区二区三区四季综 | 激情小说激情电影 | 蜜桃一本色道久久综合亚洲精品冫 | 色播视频网站 | 看免费5xxaaa毛片 | 国产一及毛片 | 日本在线不卡一区二区三区 | 亚洲网站在线观看视频 | 亚洲一区成人在线 | 福利在线免费 | 欧美另类视频在线 | 极品xxxx欧美一区二区 | 日韩一级成人 | 九九午夜视频 | 国产外围在线 | 午夜神马福利视频 | aaaaa国产欧美一区二区 | 国产青草视频在线观看 | 蜜桃视频在线免费播放 | 免费视频99 | 欧美福利视频一区二区三区 | 日本在线国产 | 日韩精品中文字幕在线播放 | 主播粉嫩国产在线精品 | 全网免费毛片 | 91精品国产91久久久久久不卞 |