C與C 混合程式設計 編譯

2021-09-11 07:46:54 字數 2395 閱讀 5754

1. 工程檔案架構

drwxrwxr-x 3 joshyoby joshyoby 4096 2月  25 15:03 ./

drwxrwxr-x 8 joshyoby joshyoby 4096 2月 25 14:45 ../

-rw-rw-r-- 1 joshyoby joshyoby 671 2月 25 14:58 makefile

-rw-rw-r-- 1 joshyoby joshyoby 168 2月 25 14:57 my_main.cpp

drwxrwxr-x 2 joshyoby joshyoby 4096 2月 25 14:49 temp/

-rw-rw-r-- 1 joshyoby joshyoby 67 2月 25 14:54 test.c

-rw-rw-r-- 1 joshyoby joshyoby 66 2月 25 14:54 test.h

-rw-rw-r-- 1 joshyoby joshyoby 158 2月 25 14:48 tools.cpp

-rw-rw-r-- 1 joshyoby joshyoby 188 2月 25 14:42 tools.h

temp目錄下只有乙個 my_main.c 檔案

2. test.c 內容

#include "test.h"

int testadd(int a, int b)

3. test.h 內容

#ifndef test_h

#define test_h

int testadd(int a, int b);

#endif

4. tools.cpp 內容

#include "tools.h"

#ifdef __cplusplus

extern "c"

#endif

#endif

6. my_main.cpp檔案內容

這裡展示了如何在.cpp檔案中呼叫.c檔案中的函式。

#include #include "tools.h"

extern "c"

using namespace std;

int main()

8. makefile檔案內容

#指定編譯工具

cc = gcc

cpp = g++

link = g++

libs = -lpthread

#編譯.so 必須新增 -fpic 和 -shared 選項

ccflags = -c -g -fpic

cppflags = -c -g -fpic

#期望得到的執行檔案或動態庫.so

#target=libxx.so

target=test

includes = -i. #-i../../

cppfiles = $(wildcard *.cpp ../*.cpp)#遍歷得到當前目錄及上層目錄中的所有.cpp檔案

cfiles = $(wildcard *.c ../*.c)#遍歷得到當前目錄及上層目錄中的所有.c檔案

objfile = $(cfiles:.c=.o) $(cppfiles:.cpp=.o)

all:$(target)

$(target): $(objfile)

# 編譯得到 .so 檔案用下面的**

# $(link) $^ $(libs) -wall -fpic -shared -o $@

# 編譯得到可執行檔案用下面的**

$(link) $^ $(libs) -wall -o2 -o $@

%.o:%.c

$(cc) -o $@ $(ccflags) $< $(includes)

%.o:%.cpp

$(cpp) -o $@ $(cppflags) $< $(includes)

clean:

rm -rf $(target)

rm -rf $(objfile)

符號解釋:

$@----表示目標檔案

$^----表示所的依賴檔案

$<----表示所依賴的當前這乙個檔案

在當前工程目錄下,開啟終端視窗,輸入make命令即可得到test可執行檔案。

c與c 混合程式設計

在純c的系統中使用c 的類出現了編譯錯誤!程式 begin mymain.c include thesocket.h void main int argc,char argv end mymain.c begin thesocket.h class thesocket end thesocket.h...

c與c 混合程式設計

1.引言 c 語言的建立初衷是 a better c 但是這並不意味著c 中類似 c語言的全域性 變數和函式所採用的編譯和連線方式與c語言完全相同。作為一種欲與c相容的語言,c 保留了一部分過程式語言的特點 被世人稱為 不徹底地物件導向 因而它可以定義不屬於任何類的全域性變數和函式。但是,c 畢竟是...

C與C 混合程式設計

c 是在 c 語言的基礎上發展起來的。在某種程度上,我們可將 c 看做 c 的一種擴充套件。在本質上,二者的資料型別和函式呼叫慣例都是一致的,因此 c 與 c 混合編譯也是很自然的事情。二者的區別僅在於編譯後函式的名字不同 c 簡單地使用函式名而不考慮引數的個數或型別,而 c 編譯後的函式名則總是將...