Не получается загрузить символ через 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

→ Ссылка