我正在围绕 Fortran 95 库创建一个小型 C++ 包装共享库。由于 Fortran 符号包含.
在符号名称中,因此我必须使用dlsym
将 Fortran 函数加载到 C++ 函数指针中。
目前,我在头文件中有一堆全局函数指针:
// 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 解决方案感兴趣。