{"record":{"id":"b22caee097e0eb49","repo":"rustdesk/rustdesk","slug":"s","errorCode":null,"errorMessage":"%s\n","messagePattern":"%s\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"flutter/linux/main.cc","lineNumber":48,"sourceCode":"  if (!librustdesk) {\n    char* error = dlerror();\n    if (error != nullptr) {\n      fprintf(stderr, \"Failed to load \\\"%s\\\": %s\\n\", lib_path, error);\n    }\n  }\n  return librustdesk;\n}\n\nbool flutter_rustdesk_core_main() {\n   void* librustdesk = dlopen_bundled_lib();\n   if (!librustdesk) {\n      librustdesk = dlopen(RUSTDESK_LIB_PATH, RTLD_LAZY);\n   }\n   if (!librustdesk) {\n      fprintf(stderr,\"Failed to load \\\"librustdesk.so\\\"\\n\");\n      char* error;\n      if ((error = dlerror()) != nullptr) {\n        fprintf(stderr, \"%s\\n\", error);\n        char* libmissed = strstr(error, \": cannot open shared object file: No such file or directory\");\n        if (libmissed != nullptr) {\n          *libmissed = '\\0';\n          char* so = strdup(error);\n          print_help_install_pkg(so);\n          free(so);\n        }\n      }\n     return false;\n   }\n   auto core_main = (RustDeskCoreMain) dlsym(librustdesk,\"rustdesk_core_main\");\n   char* error;\n   if ((error = dlerror()) != nullptr) {\n       fprintf(stderr, \"Program entry \\\"rustdesk_core_main\\\" is not found: %s\\n\", error);\n       return false;\n   }\n   return core_main();\n}","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/rustdesk/rustdesk/blob/7aa98d43cf1962a7a29ec16ffef42974377ef11e/flutter/linux/main.cc#L30-L66","documentation":"Immediately after the 'Failed to load \"librustdesk.so\"' message, the wrapper prints the raw dlerror() string. This is the actual reason the system-wide dlopen failed — classically '<lib>.so: cannot open shared object file: No such file or directory' — and the code then parses that pattern to offer a package-install hint.","triggerScenarios":"dlopen failed and dlerror() returns non-NULL; the wrapper strstr-matches ': cannot open shared object file: No such file or directory' to extract the missing library name and call print_help_install_pkg.","commonSituations":"Missing transitive dependency such as libnsl.so.1, libclang.so, or an outdated libcrypto on the host; versioned .so mismatch after a system upgrade.","solutions":["Note the library named at the start of the printed line — that is the missing dependency","Install it via the distro package manager (the program prints a suggested command for common cases)","Find the providing package with dnf provides / apt-file search / archweb pkgfile","Re-run rustdesk after installing; no rebuild is needed"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"# Parse launch logs for the dlerror line and resolve the named library (shell)\nldd /opt/rustdesk/lib/librustdesk.so | awk '/not found/{print $1}'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always read the line following 'Failed to load' — it names the missing dependency","Resolve dependencies with the distro's provides-search (dnf provides, apt-file search) instead of manual .so downloads","Keep a container/VM per supported distro to validate loadability before release"],"tags":["linux","dynamic-linking","dlerror","diagnostics"],"backgroundTag":null,"analyzedSha":"7aa98d43cf1962a7a29ec16ffef42974377ef11e","analyzedAt":"2026-08-16T06:17:34.842Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}