Мой заголовок может быть неясным, поэтому позвольте мне объяснить. У меня есть кусок кода, который выглядит так:
void* pluginFile = dlopen(fileName, RTLD_LAZY);
auto function = dlsym(pluginFile, "ExpectedFunction");
Это прекрасно работает, если dlopen
возвращает правильный файл. Моя проблема в том, что dlopen
не находит файл и возвращает NULL
. В настоящее время происходит то, что этот вызов сделан:
dlsym(0x0, "ExpectedFunction");
Проблема в том, что в моем проекте возвращается случайная функция с именем ExpectedFunction
. Я думал, что произойдет, что dlsym вернет NULL
, поскольку переданный дескриптор NULL
. Я не могу найти ожидаемое поведение для такого варианта использования в Интернете.
Мой вопрос: что должно произойти, если вы передадите дескриптор NULL
на dlsym
? Будет ли он просто возвращать NULL
или будет интерпретировать его как дескриптор в местоположении 0x0
? Если целочисленное поведение является последним, тогда я просто добавлю проверку, чтобы убедиться, что dlopen suceeded
. Если нет, я хотел бы знать, почему он случайным образом возвращает функцию с тем же именем из другой библиотеки, если дескриптор равен NULL
.
В настоящее время я использую 10 общих библиотек, в которых есть функция ExpectedFunction()
. Однако, если мы вызовем dlopen
с именем файла разделяемой библиотеки, которая не существует, она вернет NULL
. Затем dlsym
вернет указатель на ExpectedFunction()
последней загруженной библиотеки.