あなたの質問に対する答えは、CライブラリをC++に変換する必要はありません。基本的に、Cライブラリ(Linux:.a/ .so)または(Win:*。dll)をリンクして、対応するモジュールにその関数を使用することができます。
アクセスCコードはC++言語で
- C++ソース内からは、関数またはオブジェクトがサポートされている言語のためのプログラムリンケージの規則に従うことを宣言していると、「リンケージ指定」を提供します。
オブジェクトと関数のデフォルトリンケージはC++です。すべてのC++コンパイラは互換性のあるCコンパイラのCリンケージもサポートしています。
Cリンケージでコンパイルされた関数(例えば、Cコンパイラでコンパイルされた関数またはアセンブラで記述された関数)にアクセスする必要がある場合は、Cリンケージを持つ関数を宣言します。
例:
extern "C" void howdy(int);
extern "language_name" declaration ;
extern "language_name" { declaration ; declaration ; ... }
宣言リンケージ仕様
以下の表記の いずれかを使用して、オブジェクトまたは関数は、言語LANGUAGE_NAMEの結合を有することを宣言する
- 最初の表記は、宣言(o rの定義)は、language_nameのリンケージを持っています。
- 2番目の表記法は、中括弧間のすべてに、別途宣言されていない限り、language_nameのリンケージがあることを示します。 2番目の表記で中括弧の後にセミコロンを使用しないことに注意してください。
リンケージ仕様をネストできますが、中括弧はスコープを作成しません。次の例を考えてみます。
extern "C" {
void f(); // C linkage
extern "C++" {
void g(); // C++ linkage
extern "C" void h(); // C linkage
void g2(); // C++ linkage
}
extern "C++" void k(); // C++ linkage
void m(); // C linkage
}
上記のすべての関数は、ネストされたリンケージ指定子にかかわらず、同じグローバルスコープにあります。 C++コード
でCヘッダーを含む
あなたはCコンパイラを対象とした独自の定義ヘッダでCライブラリを使用したい場合は、あなたがにextern「C」括弧内のヘッダーを含めることができます。
extern "C" {
#include "header.h"
}
SIDENOTE: Cのヘッダーファイルにこのガードを追加する必要があります。
#ifndef __YOURLIB_H_
#define __YOURLIB_H_
#ifdef __cplusplus
extern "C" {
#endif
int sample_func(int n);
#ifdef __cplusplus
}
#endif
#endif
Tutorial to use C lib in C++.
それがよく書かれたC、CのAPIだと仮定すると、* *あなたのC++ APIです。クラスやその他のものが必要な場合は、それを自分で行う必要があります。 – InternetAussie
この投稿はhttp://stackoverflow.com/questions/12066279/using-c-library-for-c-programsが役に立ちます。 – Scab