シェルスクリプトでCソースファイルの特定の関数を呼び出す方法は?

シェルスクリプトでCソースファイルの特定の関数を呼び出す方法は?

一部の機能を含むCソースファイルがあります。シェルスクリプトから特定の機能を呼び出したいです。sample.c次の内容を含むファイルがあります。funcAシェルスクリプトでこれを呼び出したいです。どうすればいいですか?

#include <stdio.h>

void funcA(void){
    printf("Congrats..!! This is function A...!!\n");
}


int main(void){
    printf("Better luck next time..!!\n");
    return 0;
}

答え1

exitたとえば、最後に関数への呼び出しを追加してコードを少し変更したい場合は、エントリーになるオプションをリンカーに渡してコードをコンパイルできます。exit(0);-e funcAfuncA

ファイルが呼び出されると仮定すると、foo.cシェルスクリプトから呼び出されたときにfuncAファイルの機能を実行する次のシェルスクリプトを使用できます。foo.ccall foo.c funcA

call() {
    cc -Wl,-e"$2" $1 && ./a.out
}

答え2

C バイナリ/ライブラリの関数は、シェルから直接呼び出すことはできません。一部の言語ではこれをサポートしています(例:PythonCタイプ)しかし、bash(または他のシェル)にも同様のオプションはありません。

コマンドラインオプションを使用し、オプション/引数を使用してCプログラムを呼び出して特定の関数を呼び出すようにプログラムに指示する必要があります。

たとえば、次の操作を行います。

int main(int argc, char *argv[])  {

   if (argc != 2) {
      printf("Argument expected\n");
      return 1;
   }
   
   if (strcmp (argv[1], "funcA") == 0)
      funcA();
}

その後、シェルから次のように呼び出すことができます。

$ ./a.out funcA
Congrats..!! This is function A...!!

関連情報