婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > linux鏈接編譯詳解

linux鏈接編譯詳解

熱門標(biāo)簽:地圖標(biāo)注員都是年輕人 江蘇云電銷機(jī)器人公司 華鋒e路航港口地圖標(biāo)注 客服外呼系統(tǒng)怎么樣 如果做線上地圖標(biāo)注 揭陽智能電話機(jī)器人推薦 百度地圖標(biāo)注錯(cuò)了有責(zé)任嗎 河南信譽(yù)好的不封卡電話外呼系統(tǒng) 打電話機(jī)器人接我是他的秘書


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

測(cè)試代碼:

復(fù)制代碼 代碼如下:

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

編譯:

復(fù)制代碼 代碼如下:

gcc m.c -o m -Wall

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

修改下t.c 文件:

復(fù)制代碼 代碼如下:

#includestdio.h>
void test()
{
       printf("test\n");
}

編譯后執(zhí)行

輸出:    test

從這可看出,包含.c文件進(jìn)去對(duì)程序并沒造成什么影響,反而比包含.h文件來得直接方便,這里主要考慮到大型項(xiàng)目中,各文件直接的聯(lián)系,如A.c文件中包好M.c文件,B.c 文件中包含M.c文件,而A.c文件又包含B.c文件,那么編譯時(shí)就會(huì)報(bào)錯(cuò),函數(shù)名重定義了。
#include>與#include""的區(qū)別:

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

 
 靜態(tài)庫

復(fù)制代碼 代碼如下:

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

復(fù)制代碼 代碼如下:

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

復(fù)制代碼 代碼如下:

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

復(fù)制代碼 代碼如下:

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

復(fù)制代碼 代碼如下:

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

復(fù)制代碼 代碼如下:

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

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

復(fù)制代碼 代碼如下:

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

編譯后執(zhí)行./main
顯示:a

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

復(fù)制代碼 代碼如下:

objdump -d main

您可能感興趣的文章:
  • Linux 硬鏈接和軟鏈接詳細(xì)介紹
  • 詳解linux軟連接和硬鏈接
  • 什么是Linux軟鏈接和Linux硬鏈接
  • Linux動(dòng)態(tài)鏈接庫的使用
  • Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)核中鏈表的使用筆記整理
  • Linux下動(dòng)態(tài)鏈接庫加載路徑及搜索路徑問題
  • Python在Windows和在Linux下調(diào)用動(dòng)態(tài)鏈接庫的教程
  • Linux硬鏈接與軟鏈接原理及用法解析

標(biāo)簽:馬鞍山 婁底 金昌 赤峰 許昌 巴彥淖爾 淘寶邀評(píng) 邵陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《linux鏈接編譯詳解》,本文關(guān)鍵詞  linux,鏈接,編譯,詳解,linux,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《linux鏈接編譯詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于linux鏈接編譯詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章
    主站蜘蛛池模板: 天镇县| 闽清县| 临城县| 房山区| 合山市| 牟定县| 泗洪县| 宁津县| 公主岭市| 依兰县| 商南县| 临颍县| 务川| 嵩明县| 堆龙德庆县| 建瓯市| 光山县| 中牟县| 南宁市| 曲周县| 资源县| 栖霞市| 桂阳县| 马关县| 怀来县| 芦山县| 绥棱县| 资阳市| 乐至县| 金昌市| 康保县| 保靖县| 巴马| 平定县| 永顺县| 安陆市| 乐平市| 泌阳县| 北票市| 探索| 娱乐|