char *function_name = "foo"
を使用して、Cプログラムからfoo()
を呼び出すことができます。 foo()
ルーチンは共有ライブラリにあります。私はdlopenなどへのアクセス権がありません。通常の実行可能ファイルのロードステップです。この名前を解決して共有ライブラリからロードする方法はありますか?ライブラリ関数をその名前から呼び出すにはどうすればよいですか?
答えて
いいえdlopen
とdlsym
のどちらかを使用するか、独自の関数名と関数ポインタの配列を作成して、そのように調べます。
'dlsym'は擬似ハンドル' RTLD_DEFAULT'を取ることができるので、 'dlopen'は必要ないかもしれません。 –
確かに、私はそれを言及すべきでした。 '-rdynamic'を使ってリンクしていない限り、メインプログラムで定義されたシンボルは見つからないことに注意してください。 –
私はこれが事実だと思ったが、確かにしなければならなかった。 –
関数名とロードアドレスにアクセスできる場合を除き、これを行うことはできません。 WindowsではLoadLibrary()
とGetProcAddress()
を使用してこれを行うことができます。
あなたのケースでは、私はあなたが入手可能なもの(プラットフォーム、コンパイラなどは言及していません)、またはこれが実現可能かどうかを正確にはわかりません。しかし、そうではないと強く疑う。
関数を名前で呼び出す一般的な方法は、名前と関数ポインタのテーブルを使用することです。この手法の注意点は、関数がすべて同じシグニチャを持たなければならないことです。
名前の機能は分かっていますが、機能のシグネチャが異なる場合は、if-then-else
ラダーを使用する必要があります。
同じシグネチャを持つ必要はなく、同じ戻り値の型にする必要があります。 'rettype(*)()'を関数型(プロトタイプではなく)として使うことができます。そして、あなたはそれを呼び出すときに正しい引数型を渡す責任があります。あるいは、すべての関数ポインタ型が他の関数ポインタ型へのラウンドトリップキャストを生き延びることが保証されているので、それらを呼び出す前にall型に 'void(*)()'を使い、正しい型にキャストすることができます。 –
- 1. フラグメント内の関数を別の関数から呼び出すにはどうすればよいですか?
- 2. 関数を呼び出すときに引数名を渡すにはどうすればよいですか?
- 3. それを呼び出した関数を呼び出す関数を取得するにはどうすればよいですか?
- 4. クラス内のオブジェクト内からクラス関数を呼び出すにはどうすればよいですか?
- 5. モジュールから動的クラスの関数を呼び出すにはどうすればよいですか?
- 6. javascriptコードからjquery関数を呼び出すにはどうすればよいですか?
- 7. 関数からイベントハンドラを呼び出すにはどうすればよいですか?
- 8. キーワードから関数を呼び出すにはどうすればよいですか?
- 9. DCLスクリプトからPerl関数を呼び出すにはどうすればよいですか?
- 10. iOS AppDelegateからView Controller関数を呼び出すにはどうすればよいですか?
- 11. PythonからJavascript関数を呼び出すにはどうすればよいですか?
- 12. シェルスクリプトからPerl関数を呼び出すにはどうすればよいですか?
- 13. PythonプログラムからOCaml関数を呼び出すにはどうすればよいですか?
- 14. LuaスクリプトからC++関数を呼び出すにはどうすればよいですか?
- 15. クラス名そのものを呼び出す関数ですか?
- 16. 関数呼び出しから関数呼び出し名を抽出する
- 17. Linuxカーネルから標準ライブラリ呼び出しを行うにはどうすればよいですか?
- 18. jQueryの外部からプラグイン内の関数を呼び出すにはどうすればいいですか?
- 19. アクションデリゲートの呼び出しの名前/詳細を取得するにはどうすればよいですか?
- 20. Scalaキーワードと同じ名前のJavaメソッドを呼び出すにはどうすればよいですか?
- 21. MVCビューで呼び出しアクションの名前を調べるにはどうすればよいですか?
- 22. wxPythonを使用して検索する関数に関数を呼び出す(例)関数を呼び出すにはどうすればいいですか?
- 23. Django:テンプレートからビュー関数を呼び出すにはどうすればいいですか?
- 24. CakePHPコンポーネントからヘルパー関数を呼び出すにはどうすればいいですか?
- 25. 匿名の自己呼び出し関数から関数を公開するにはどうすればよいですか?
- 26. P /呼び出された名前で関数を呼び出す
- 27. 関数呼び出しから関数(e、arg)をjQueryで使用するように変更するにはどうすればよいですか?
- 28. 短い名前のPerlクラスを呼び出すにはどうすればいいですか?
- 29. jQuery配列に格納された関数を呼び出すにはどうすればよいですか?
- 30. ページの離脱の確認時に関数を呼び出すにはどうすればよいですか?
ターゲットOSとは何ですか? – pascal
パスカルが指摘しているように、この質問にはOSやOSファミリのタグが本当に必要です。 (おそらくPOSIX ..?) –