2017-02-13 23 views
0

私は共有ライブラリを動的にロードすることを含むCの練習をしています。dlsym - "関数への引数が多すぎます"エラー

void (*test)(void);  
test = dlsym(handle, "lib_fill_random"); 
(*test)(array, size); 

lib_fill_randomが.hの中の両方に2つの引数で宣言されています。

test2.c: In function ‘main’: 
test2.c:27:5: error: too many arguments to function ‘test’ 
    (*test)(array, size); 

これは私がエラーを取得するビットがある:私はgcc -o test2 test2.c -ldlコマンドを使用して私のテストプログラムをコンパイルすると、私はエラーを取得します.cファイルはvoid lib_fill_random(double *array, int size);となり、それ自体では問題なく動作します。

この問題の原因は何ですか?

+1

「void(* test)(void)」という宣言は、関数が引数を取らないことを意味します。 – Barmar

+0

@Barmarだから、 'void(* test)(double *、int);'になるはずです。このようなばかげた質問には申し訳ありません、私はちょうど今dssymちょっと混乱していると思う... – COLOuRSLIDES

+0

私はあなたが私の答えを見る前にそのコメントを書いたと思います。 – Barmar

答えて

1

関数ポインタの宣言は、実際の関数の宣言と一致しなければなりません。

void (*test)(double *, int); 

この宣言では、引数は引数を取らないので、引数を指定して呼び出すとエラーが発生します。

+0

私は見る!説明ありがとう – COLOuRSLIDES