Доброго времени суток.
Хочу сделать так: в основной программе реализуется некоторая функция, которая затем используется в плагине. Но получаю ошибку линковки (уже в программе). Проблема назрела давно, но решалась реализацией этой функции в отдельной библиотеке, которая на этапе компоновки линковалась и к программе, и к плагину. Но не нравится мне такое решение.
Ниже следует минимальный пример:
$ cat file.h
void so_func();
$ cat file1.c
#include"file.h"
#include<stdio.h>
void so_func(){
printf("shared fucking object!\n");
}
#include<dlfcn.h>
int main(){
void *dl=dlopen("file.so",RTLD_NOW);
if(dl==0)printf("%s\n",dlerror());
return 0;
}
$ cat file2.c
#include"file.h"
void some(){
so_func();//!!!
}
$ gcc file2.c -o file.so -shared
$ gcc file1.c -o main -ldl -Wl,-rpath,.
$ ./main
./file.so: undefined symbol: so_func
Пробовал играться с разными флагами RTLD_, но либо никакого эффекта, либо вообще сегфолт (на вызове dlopen вероятно, не проверял).