load symbol 'InsertionSortShared': dlsym(0x7fa36ce04080, InsertionSortShared): symbol not found
код:
void* handle = dlopen("./libshared.dylib", RTLD_LAZY);
if (!handle) {
std::cerr << "Cannot open library: " << dlerror() << '\n';
return 1;
}
typedef void (*sort_t)(int* a, int size);
dlerror();
sort_t Sort = (sort_t)dlsym(handle, "InsertionSortShared");
const char *dlsym_error = dlerror();
if (dlsym_error) {
std::cerr << "Cannot load symbol 'InsertionSortShared': " << dlsym_error << '\n';
dlclose(handle);
return 1;
}
что делать?
Убедиться, что нужная функция экспортируется с C-ишным именем, например, выполнив текстовый поиск по файлу либы
nm -gU ./libshared.dylib и смотри, есть ли нужный символ
Убедиться, что плюсовый манглинг не перековеркал символы
Обсуждают сегодня