關於在linux下用gcc編譯標頭檔案的問題

2021-05-04 20:54:09 字數 2340 閱讀 1148

1樓:匿名使用者

我用一個例子來告訴你怎麼樣在 c++ 裡使用c的標頭檔案/函式。

比方說我有一個c的標頭檔案叫 c.h, c的原始碼檔案叫 c.c,內容分別是

c.h:

#ifndef _asdfd_included_

#define _asdfd_included_

#include

extern int test(int a);

#endif

c.c:

#include "c.h"

int test(int a)

現在我想在c++中使用c.c中提供的函式test(),我的c++檔名字叫 a.cpp,那麼裡面跟c有關的部分就要用 extern "c" {} 大括號括起來,看看我的

a.cpp:

#include

using namespace std;

extern "c"

int main()

看到了吧,#include "c.h" 被 extern "c" {}括起來了。

然後是如何編譯,先把c檔案編出目標檔案(.o)來

gcc -c c.c

你會看到生成了 c.o,其實,有目標檔案就夠了,如果你一定要做成(靜態/動態)庫檔案,也是可以的,不過我這裡就不深入了,做成庫和直接用目標檔案對解決你的問題沒有任何區別。

然後再編譯c++檔案,也就是我的 a.cpp

g++ -o hello a.cpp c.o

看到了吧,我在編譯 a.cpp 的時候把c生成的 c.o也加上了。 然後生成 可執行的 hello, 執行

./hello

就可以看到

a = 12

b = 144

關於建立靜態庫,假定你有3個c檔案, a.c, b.c, c.c 提供了你c++要用到的介面,那麼可以把這三個c檔案編譯出來的目標檔案放到一個庫檔案裡供c++使用,方法為

先編譯出目標檔案

gcc -c a.c b.c c.c

這時候你應該看到有 a.o b.o c.o了

然後建立庫檔案

ar cr libtest.a a.o b.o c.o

這三個目標檔案就放入 libtest.a 這個靜態庫中了,然後編譯c++程式 (你的c++程式應該已經按照我前面說的用 extern "c" 把c的介面都括起來了),假定你的 libtest.a 放在 /home/aaa/lib下

g++ -o my.exe my.cpp -l/home/aaa/lib -ltest

就會生成可執行檔案 my.exe了。

2樓:匿名使用者

c**裡包含標頭檔案,編譯用gcc編譯c檔案,多個c檔案自己寫個makefile,-i可以指定標頭檔案目錄

比如gcc -i/my/include/file *********xx ,把標頭檔案放一個目錄就行了

3樓:趣園藝

在linux下面,如果要編譯一個c語言標頭檔案,,要使用gnu的gcc編譯器,以一個例項來說明如何使用gcc編譯器:

假設有下面一個非常簡單的源程式(hello.c):

int main(int argc,char **argv)要編譯這個程式,只要在命令列下執行:

gcc -o hello hello.c

gcc 編譯器就會生成一個hello的可執行檔案;執行./hello,就可以看到程式編譯後的輸出結果「hello linux」。

關於在linux下用gcc編譯標頭檔案

4樓:匿名使用者

首先,確定你的標頭檔案都用巨集隔開了,防止了重複定義。例如,在file.h 中的開頭就是

#ifndef __file__head___

#define __file__head___

//標頭檔案中的內容

#endif //__file__head___

之後,file.h中用到了list.h ,所以file.h中#include "list.h"//假設標頭檔案都在同一目錄下

list.h中用到了preapre.h 所以list.h中#include "prepare.h"

prepare.h中用到了node.h 所以prepare.h中#include "node.h"

在某些情況下,由於**組織等的問題,還是會出現編譯問題,這個就是**組織技巧的問題了,要根據具體**具體判斷了。

另外,準確的說標頭檔案只是在編譯的第一步,預處理的時候使用了,真正被「編」的應該是原始檔,這個是編譯原理方面的問題了。

5樓:

標頭檔案都是原始碼存放,include過這些標頭檔案的**,在編譯時gcc會自動加進,但是要保證路徑和檔案都存在。

如何用GCC在linux下編譯C語言程式

在linux下面 bai,如果要編譯 一個c語言源du程式,我們要使zhi用gnu的gcc編譯器,假設我dao們有下面一個非常內簡單的源程式容 hello.c int main int argc,char argv 要編譯這個程式,我們只要在命令列下執行 gcc o hello hello.c gc...

linux交叉編譯工具鏈和gcc是什麼關係啊

編譯工具鏈一般最簡化的為 binutils gcc glibc kernel header 組合的環境。gcc 就是編譯器,他的輸出每次安裝只能有針對一個架構的指令輸出。如果要多個架構輸出,那就要裝多個 gcc 所以編譯工具鏈裡面會有一個 gcc 交叉編譯就是跨架構編譯,編譯出來的程式不能在本機執行...

linux系統中gcc的命令怎麼用

gcc最基本的用法是 gcc options filenames 其中options就是編譯器所需要的引數,filenames給出相關的檔名稱。c,只編譯,不連線成為可執行檔案,編譯器只是由輸入的.c等源 檔案生成.o為字尾的目標檔案,通常用於編譯不包含主程式的子程式檔案。o output file...