Cを使ってプログラムを作っていますが、C++専用のAPIを持つライブラリをたくさん使う必要があります。では、C++ で共有オブジェクトを作成し、C を使用してその機能にアクセスすることは可能ですか?
- 私が渡したり返したりする唯一のデータは、C 互換のデータ型です。
- ここでは、cpp への変換または移行はオプションではありません。
これらのコードをインターフェイスできない場合、C++ コードから C コードへの情報を取得するにはどうすればよいですか? C から C++ 関数を呼び出してみましたが、リンク中に を含めるとエラーが発生します<string>
。では、C から C++ 関数を呼び出す場合、C コンパイラと互換性のあるコードのみを使用する必要がありますか?
C++ ヘッダー cppfile.hpp
#ifndef CPPFILE_H
#define CPPFILE_H
#ifdef __cplusplus
extern "C" {
#endif
extern int myfunction(const char *filename);
#ifdef __cplusplus
}
#endif
#endif
C++ ファイル cppfile.cpp
#include "cppfile.hpp"
#include <string>
int myfunction(const char *filename) {
String S(filename);
return 0;
}
C ファイル cmain.c
#include "cppfile.hpp"
int main(int argc, char **argv)
{
int i = myfunction(argv[1]);
printf("%d\n", i);
return 0;
}
コンパイル:
gcc -c cmain.c
g++ -fPIC -shared -o cppfile.so cppfile.cpp