Я использую dlopen для загрузки динамически сгенерированного кода.Программа вызывает компилятор кода и генерирует файл .so, который затем загружается программой для расширения самого себя.
Проблема в том, что если я использую то же имя для сгенерированного кода, dlopen возвращаетдескриптор старого объекта, а не нового.
Код выглядит следующим образом:
…generate code into test.cpp
system("gcc <args> test.cpp -o test.so");
void *handle = dlopen("test.so");
void *sym = dlsym(handle, "run");
(*sym)();
dlclose(handle);
…Do other work
…generate different code to test.cpp
system("gcc <args> test.cpp -o test.so");
void *handle = dlopen("test.so");
void *sym = dlsym(handle, "run");
(*sym)();
<crash here because the code isn't what was expected>
Является ли это основным недостатком в кэше кода dlopen
или чем-то известным и не известнымхорошо документировано в dlopen
?