1. 程式人生 > >linux 程式設計學習筆記--編譯多個檔案

linux 程式設計學習筆記--編譯多個檔案

把學的東西記下來,複習

假設有三個檔案:

main.c   su.c su.h

內容分別為

#include <stdio.h>                                            int sum(int a,int b);                                                int sum(int a,int b){

#include "sub.h"                                                                                                                                                return a+b;}

void main(void){

int a=10,b=30;

fprintf(stdout,"%d\n",sum(a,b));

}

對三個檔案進行編譯中,因為有標頭檔案,注意寫完後進行儲存,當檔名出現*時,說明沒有儲存

gcc -c -o main.o main.c

gcc -c -o sub.o sub.c

gcc -o test main.c sub.c  

生成test檔案, ./test  進行執行

$gcc -S -o main.s main.c ,對main.c進行預處理,並將結果打印出來,裡面擴充套件了所有包含的檔案、所有定義的巨集。

另一種方式:不想以原始碼釋出程式時,可以使用-shared選項生成庫檔案。

$gcc -c -o  sub.o sub.c

$gcc -shared -o sub.a sub.o 

若要使用 sub.c 中包括的函式時,只需要

$gcc -o test main.o ./sub.a  

也可以用簡單的編譯

gcc main.c sub.c -o main

執行./main即可

寫成makefile檔案:(檔名為makefile)

main:main.o sub.o

gcc main.c sub.c -o main

main.o:main.c sub.h

gcc main.c -o main.o

sub.o:sub.c sub.h

gcc sub.c -o sub.o

clean:

rm -f main *.o

執行時:直接用make  會在檔案中需要Makefile檔案

              make clean  執行動作

相關推薦

linux 程式設計學習筆記--編譯檔案

把學的東西記下來,複習 假設有三個檔案: main.c   su.c su.h 內容分別為 #include <stdio.h>                                            int sum(int a,int b);  

Linux系統程式設計學習筆記(1)-檔案的I/O操作

概述 在Linux系統下,通常以一個非負整數來代指一個開啟的檔案,這些檔案可以包括終端,socket,裝置,普通檔案等等。規定的三個標準的檔案描述符為0,1,2下面分別介紹(在互動式shell中,這些檔案描述符通常指向shell執行所在的終端): 檔案描述

Linux程式設計學習筆記----執行緒程式設計執行緒同步機制之互斥量(鎖)與讀寫鎖

互斥鎖通訊機制 基本原理 互斥鎖以排他方式防止共享資料被併發訪問,互斥鎖是一個二元變數,狀態為開(0)和關(1),將某個共享資源與某個互斥鎖邏輯上繫結之後,對該資源的訪問操作如下: (1)在訪問該資源之前需要首先申請互斥鎖,如果鎖處於開狀態,則申請得到鎖並立即上鎖(關),防

Linux程式設計學習筆記----執行緒程式設計之執行緒同步條件變數

轉載請註明出處:http://blog.csdn.net/suool/article/details/38582521. 基本概念與原理 互斥鎖能夠解決資源的互斥訪問,但是在某些情況下,互斥並不能解決問題,比如兩個執行緒需 要互斥的處理各自的操作,但是一個執行緒的操作僅僅存

Java 《Effective Java 中文版 第2版》學習筆記 遇到構造器時要考慮用構建器

fec 利用 客戶端代碼 except car beans pri 很好 種類   靜態工廠和構造器有個共同的局限性:它們都不能很好地擴展到大量的可選參數。   當一個類中有若幹個必選屬性和多個可選屬性時,采用重疊構造器模式、JavaBeans模式或者Builder模式,但

Makefile編譯檔案

all:easy_select tcp_select .PHONY:all easy_select:easy_select.c gcc $^ -o [email protected] tcp_select:tcp_select.c g

Linux中替換目錄下檔案中的字串

在Linux中,替換多個檔案中的某個字串可以使用grep和sed的組合來實現這個功能。 基本格式 grep -rl matchstring somedir/ | xargs sed -i 's/string1/string2/g' matchstring是你將要被替換

Linux程式設計學習筆記----System V程序間通訊(訊號量)

關於System V Unix System V,是Unix作業系統眾多版本中的一支。它最初由AT&T開發,在1983年第一次釋出,因此也被稱為AT&T System V。一共發行了4個System V的主要版本:版本1、2、3和4。System V Rel

TCP/IP網路程式設計 學習筆記_15 --播與廣播

轉自:http://blog.csdn.net/u010223072/article/details/48269213 前言:想想這麼一種情況,網路電臺可能需要同時向成千上萬的使用者傳輸相同的資料,如果用我們以前講過的傳輸形式,每個使用者都傳輸一次,這樣肯定是不合理的

Linux程式設計學習筆記----程序間通訊——管道

程序通訊概述 在Linux系統中,程序是一個獨立的資源管理單元,但是獨立而不孤立,他們需要之間的通訊,因此便需要一個程序間資料傳遞、非同步、同步的機制,這個機制顯然需要由OS來完成管理和維護。如下: 1、同一主機程序間資料互動機制:無名管道(PIPE),有名管道(FIF

Dev-C++:同時編譯檔案

Dev-C++同時編譯多個C檔案:    考察多原始碼檔案程式的編譯及標頭檔案的使用 :   如果程式的函式 分別放在不同的程式之中,那就必須是定義常量的#define指令對於每個檔案都可用:                 定義一個***.h檔案,儲存函式原型和常量定義  

linux下一次cp檔案

linux下使用cp命令拷貝多個檔案有幾種方法,一是使用萬用字元,二是使用管道 一.萬用字元的使用 萬用字元是一種特殊語句,主要有星號(*)和問號(?),用來模糊搜尋檔案。主要的萬用字元有: *         匹配任意長度的字串 ?        匹配一個長度的字元

Linux 程式設計學習筆記----命令列引數處理

問題引入----命令列引數及解析 在使用linux時,與windows最大的不同應該就是經常使用命令列來解決大多數問題.比如下面這樣的: 而顯然我們知道C語言程式的入口是mian函式,即是從main函式開始執行,而main函式的原型是: int main( int a

學習筆記靜態庫連線成一個動態庫例子

目標: 將多個靜態庫連結為一個動態庫,提供統一的介面給外部使用。 看一下例子的目錄檔案: 編譯後將生成 libAdd.a libMutiply.a , 然後將這兩個.a靜態庫和apl_myApi.o 連結成為一個動態庫 libMyApi.so。提供這個動態庫給app.cp

Servlet學習筆記 上傳單檔案的方法

本篇部落格介紹的是單個檔案上傳到tomcat伺服器上的方法,下面開始介紹方法。 第一:首先要注意的是上傳檔案必須用的是post方法,用get的話則不能完成,form表單裡需要在原來的基礎上增加一個 enctype="multipart/form-data

Effective-Java學習筆記 遇到構造器引數時要考慮用構建器

要求建立一個例項,包含多個必選的引數和多個可選引數 方法一 習慣採用重疊構造器模式,即提供多個引數不同的構造方法,然後根據需要選擇相應的構造方法建立例項。但是當有許多引數的時候,程式碼就很難編寫,並難以閱讀 方法二 JavaBeans模式,用一個無參構

C語言程式設計 學習筆記 12.3 原始碼檔案、標頭檔案、宣告

我們經常在做“分而治之”的事情(多個.c檔案): 1.main()裡的程式碼太長了適合分成幾個函式 2.一個原始碼檔案太長了適合分成幾個檔案 3.兩個獨立的原始碼檔案不能編譯成可執行的程式 對於(1),我們可以舉以下例子: 有個主函式main.c,有另外一個函式

linux 核心模組程式設計編譯原始檔(三)

編譯擁有多個原始檔的核心模組的方式和編譯一個原始檔的方式差不多,我們先來看下我們需要的檔案都有哪些。 首先是main.c檔案 #include <linux/module.h> #include <linux/init.h> MODULE_LICENSE

MySQL高效程式設計學習筆記(二)--表的連線

關係型資料庫為了減少資料佔用有限的儲存空間,都會進行資料分割到幾個表的規範化處理,將這幾個分割管理的資料重新結合到一起就是表連線處理。 1.內連線 內連線就是表間的主鍵和外來鍵相連,只取得鍵值一致的資料的連線方式。具體語法: Select 列

Linux編譯不同目錄下的檔案以及靜態庫、動態庫的使用

轉自:http://blog.csdn.net/luotuo44/article/details/16970841 一、  編譯不同目錄下的多個檔案 各個檔案的佈局如下:         head.h檔案的程式碼: