Fortran 95 ライブラリを中心に小さな C++ ラッパー共有ライブラリを作成しています。Fortran シンボルにはシンボル名が含まれているため、Fortran 関数を C++ 関数ポインターにロードする.
ために使用する必要があります。dlsym
現在、ヘッダー ファイルに一連のグローバル関数ポインターがあります。
// test.h
extern void (*f)(int* arg);
そして、それらを対応する C++ ファイルに入力します。
// test.cc
void (*f))(int* = reinterpret_cast<void(*)(int*>(dlsym(RTLD_DEFAULT, "real_f.symbol_name_");
質問:
- このようにすると、これらのポインターはいつ入力されますか?
- このライブラリをロードする実行可能ファイルにそれらがロードされていると想定できますか?
- 特に、実行可能ライブラリまたは他のライブラリで静的に作成されたオブジェクトでこれらの関数を使用できますか? それとも、これは静的初期化順序の大失敗に悩まされていますか?
- 上記の方法が正しくない場合、実行可能ファイルやその他のライブラリの静的オブジェクトで使用できるように、これらのポインターを設定する最もエレガントな方法は何ですか?
私は Solaris で Sun Studio コンパイラを使用していますが、それが違いを生むのであれば、Linux での GCC のソリューションにも興味があります。