我有一個C++庫,它提供了用於管理數據的各種類。我有圖書館的源代碼。在C代碼中使用C++庫
我想擴展C++ API以支持C函數調用,以便該庫可以與C代碼和C++代碼同時使用。
我使用GNU工具鏈(gcc,glibc等),因此語言和體系結構支持不是問題。
是否有任何理由這在技術上不可能?
是否有任何gotcha的我需要注意什麼?
是否有關於此的資源,示例代碼和/或文檔?
,我已經發現了一些其他的事情:
- 使用以下來包裝你的C++需要由C代碼中使用標頭。
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- 保持 「真正的」 C++在單獨的頭文件不是由C.包括接口想到PIMPL principle這裏。使用
#ifndef __cplusplus #error
東西有助於在這裏檢測到任何瘋狂。 - 小心C代碼作爲C代碼中的名稱
- 在C和C++編譯器之間枚舉大小不同。如果您使用GNU工具鏈,可能不是問題,但仍然要小心。
對於結構遵循以下形式,以便C不會感到困惑。
typedef struct X { ... } X
然後使用指針繞過C++對象,他們只是在C聲明爲結構體X,其中X是C++的對象。
所有這些都是由一位在C++中的嚮導的朋友提供的。
有點晚了,但是我寫了一個關於C++的C封裝的小指令:http://www.teddy.ch/c++_library_in_c/ – Teddy 2015-07-20 20:09:26