GNU/Linux >> Linux の 問題 >  >> Linux

C++ で C 関数を呼び出す方法、C で C++ 関数を呼び出す方法 (C と C++ の混合)

C と C++ のコードを一緒に混合する必要がある場合があります。たとえば、従来の C コードを使用している場合や、特定の C ライブラリを使用している場合、C++ コードに特定の機能が提供されます。そのため、C++ ファイルで C コードを使用する場合、またはその逆の場合は、いくつかの特別な手順に注意する必要があります。

この記事では、いくつかの例を通して、C/C++ コードを混在させるために必要な手順について説明します。

1. C++ から C 関数を呼び出す

このセクションでは、C++ コードから C 関数を呼び出す方法について説明します。

C コード (Cfile.c) は次のとおりです。

#include <stdio.h>

void f(void)
{
    printf("\n This is a C code\n");
}

最初のステップは、この C コードのライブラリを作成することです。次の手順で共有ライブラリを作成します:

$ gcc -c -Wall -Werror -fPIC Cfile.c
$ gcc -shared -o libCfile.so Cfile.o

上記の 2 つのコマンドの結果として、共有ライブラリ libCfile.so が生成されます。

メインの C++ コード (main.cpp) は次のとおりです:

#include <iostream>

extern "C" {
void f();
}

void func(void)
{
    std::cout<<"\n being used within C++ code\n";
}

int main(void)
{
    f();
    func();
    return 0;
}

C 関数 f() は表記法 extern “C” 内で宣言され、cpp コンパイラーに C 型リンケージがあることを伝えます。

次に、コードをコンパイルします (共有ライブラリ libCfile.so がコードにリンクされていることを確認してください):

$ g++ -L/home/himanshu/practice/ -Wall main.cpp -o main -lCfile

実行可能ファイルを実行する前に、共有ライブラリのパスが環境変数 LD_LIBRARY_PATH に含まれていることを確認してください。

$ export LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH

次に、実行可能ファイル「main」を実行します:

$ ./main

 This is a C code

 being used within C++ code

これで、C 関数が C++ コードから正常に呼び出されたことがわかります。

また、Linux で共有ライブラリを作成する方法の詳細については、こちらをお読みください。

2. C から C++ 関数を呼び出す

このセクションでは、C コードから C++ 関数を呼び出す方法について説明します。

C++ コード (CPPfile.cpp) は次のとおりです:

#include <iostream>

void func(void)
{
    std::cout<<"\n This is a C++ code\n";
}

関数 func() を C コードから呼び出す方法を見ていきます。

このための最初のステップは、表記 extern “C” を導入して、この関数の宣言/定義を変更することです。

#include <iostream>

extern "C" void func(void)
{
    std::cout<<"\n This is a C++ code\n";
}

次のステップは、上記のコードからライブラリを作成することです。次の手順で共有ライブラリを作成します:

 g++ -c -Wall -Werror -fPIC CPPfile.cpp
$ g++ -shared -o libCPPfile.so CPPfile.o

上記のコマンドにより、libCPPfile.so 共有ライブラリが生成されます。

C 言語のメイン コード (main.c) :

#include <stdio.h>

extern void func(void);

void f(void)
{
    printf("\n being used within C code\n");
}

int main(void)
{
    func();
    f();
    return 0;
}

ここでは、C++ 関数が extern として宣言されていることに注意してください。

次のように C コード (main.c) をコンパイルします。

gcc -L/home/himanshu/practice/ -Wall main.c -o main -lCPPfile

現在のディレクトリ パスを環境変数 LD_LIBRARY _PATH に追加します

export LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH

次に、実行可能ファイル「main」を実行します:

$ ./main

 This is a C++ code

 being used within C code

上記の出力は、C++ 関数が C コードから正常に呼び出されたことを示しています。


Linux
  1. 未定義の関数apc_fetch()の呼び出しを修正する方法–PHPの致命的なエラー[解決済み]

  2. Linux – Linuxディストリビューションが安全で、悪意のあるコードがないことを確認する方法は??

  3. CodeBlocks –無料のクロスプラットフォームC、C ++、Fortran IDE

  1. .intputrc ファイルで Linux のマクロと関数のキーバインドを作成する方法

  2. システムコール fork() と execv 関数

  3. カーネルモジュールコードにポーリング機能を追加するには?

  1. Linuxシェルスクリプトで関数を定義して使用する方法

  2. Awk内のBashスクリプトでBash関数を呼び出す方法は?

  3. Linux で Windows Visual C++ コードをコンパイルする方法