C如何呼叫C 的庫

2021-05-23 02:13:21 字數 1441 閱讀 7750

前段時間遇到了乙個c呼叫c++的介面的問題,現在把思路整理一下。

提供給我們的是c++標頭檔案(.h)和靜態庫(.a)

c不可以直接呼叫c++,我們採用c++呼叫c++的方法,另外建乙個適配層

在我們的c++適配層中加上extern "c"

c呼叫c++適配層,適配層呼叫c++就ok了。

下面用乙個例子來說明一下:

1、模擬條件one.h,libone.a

one.h

#ifndef __one_h__

#define __one_h__

void print();

#endif

/one.cpp

#include

#include "one.h"

void print(void)

生成one.a

g++ -c one.cpp

ar -rcs libone.a one.o

one.cpp  ----->  libone.a

2、要呼叫c++的c函式

three.c

#include "one.h"

int main()

這樣呼叫肯定是不成功的,和我之前遇到的問題是一樣的了

請看下面的解決方法:

3、c++適配層

two.h

#ifndef __two_h__

#define __two_h__

#ifdef __cplusplus

extern "c"

#endif

#endif

/two.cpp

#include "one.h"

#include "two.h"

extern "c"

}編譯成庫

g++ -c two.cpp

ar -rcs libtwo.a two.o

two.cpp  ----->  libtwo.a

4、現在直接在three.c中呼叫two中的print2()就可以達到目的了。

5、需要特別說明的是,這個只是最簡單的c++的乙個函式,如果這個函式是在類中該怎麼辦呢?

我們還是本著上面的思想,把c不能識別**轉化為c可以呼叫的:

假設classname類中有個成員函式

function_in_class(char str);

這回我們的適配層就要多點東西了

標頭檔案中:typedef void *vclassname ;

原始檔中:

static vclassname classname_create_1()

static void function_in_class_c_1(vclassname thiz,char strt)

extern "c"

void function_in_class_c(vclassname thiz,char str)

}

C 如何呼叫linux so庫

中的內容 include int sum int a,int b int minus int a,int b 中的內容 using system using system.runtime.interopservices public class libtestdemo x x minus 88,42...

C 呼叫C 庫檔案

winform下呼叫dll檔案,將dll銬入bin目錄下,using system.runtime.interopservices dllimport securitymaker.dll entrypoint security make public static extern void makes...

呼叫c 呼叫C標準庫的exit函式

在common lisp中並沒有乙個叫做exit的內建函式,所以如同之前實現的 exit一樣,我會新增一種需要識別的 first expr 即符號exit。為了可以呼叫c語言標準庫中的exit函式,需要遵循呼叫約定。對於exit這種只有乙個引數的函式而言,情形比較簡單,只需要跟對 exit一樣處理即...