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...