私は関数ポインタの配列を公開する共有ライブラリを構築しました。関数定義はこのライブラリにもありますが、エクスポートされません。Cの共有ライブラリからのアクセスポインタ
別のプログラムからこのライブラリをロードし、エクスポートされたポインタを使用してこれらの関数を直接呼び出すことはできますか?
これは私がやろうとしていることです。
マイライブラリ:
#include <dlfcn.h>
int main(){
void * lib = dlopen("libt1.so", RTLD_NOW);
if(!lib) { printf("%s\n", dlerror()); return 0; }
void (*myptr)() = (void (*)()) dlsym(lib, "myptr");
if(!myptr){ printf("%s\n", dlerror()); return 0; }
printf("%p\n", myptr);
myptr();
}
これはSEGM障害を与える:
#include <stdio.h>
void myfun(){
printf("myfun\n");
}
extern void (*myptr)() = myfun;
私はこのようにそれを使用しようとしています。