Не получается загрузить символ через dlsym
Пытаюсь разобраться с подгрузкой динамических библиотек. Пробую запустить такую штуку:
main.cpp
#include <iostream>
#include <dlfcn.h>
void (*g)(int &);
int abc = 255;
int main(){
std::cout << abc << std::endl;
void *a = dlopen("mylib.so", RTLD_LAZY | RTLD_GLOBAL);
if(!a){
std::cout << "AAAAAAAAAAAAAA";
return 1;
}
g = (void (*)(int &)) dlsym(a, "f");
const char* dlsym_error = dlerror();
if (dlsym_error) {
std::cerr << "Cannot load symbol create: " << dlsym_error << '\n';
return 1;
}
g(abc);
std::cout << abc << std::endl;
return 0;
}
mylib.cpp
extern "C"
void f(int &x){
x = 0;
}
Проверял символы через nm, вроде nm находит нужную функцию
nm ./mylib.so -DC
w __cxa_finalize
00000000000010f9 T f
w __gmon_start__
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
Библиотека загружается нормально, а вот найти f почему то не получается. Пересмотрел уже миллиард примеров, не могу понять что тут не так
Ответы (1 шт):
Автор решения: Romchirik
→ Ссылка
Как оказалось, проблема до безобразия простая. Нужно было поменять путь к либе c mylib.so на ./mylib.so