dotnet/runtime · error

Export ' ' not found.

Error message

Export '%s' not found.

What it means

Printed by try_get_export() in corerun.cpp at src/coreclr/hosts/corerun/corerun.cpp:200 when pal::get_module_symbol returns nullptr for a requested CoreCLR export symbol (coreclr_initialize, coreclr_execute_assembly, coreclr_shutdown_2, coreclr_set_error_writer). Without these entry points the host cannot drive the runtime.

Solutions

  1. Rebuild coreclr and corerun together so exported symbols match.
  2. Verify the symbol exists: `nm -D libcoreclr.so | grep coreclr_initialize` (Linux) or `dumpbin /exports coreclr.dll` (Windows).
  3. Confirm the coreclr path passed to corerun is the freshly built module.
  4. Do not strip coreclr exports when packaging.
Defensive patterns

Strategy: validation

Validate before calling

const char* required[] = {"coreclr_initialize", "coreclr_execute_assembly",
                       "coreclr_shutdown_2"};
for (auto s : required) {
    if (pal::get_module_symbol(coreclr_mod, s) == nullptr) {
        pal::fprintf(stderr, W("coreclr missing export '%s' -- rebuild/relink\n"), s);
        return EXIT_FAILURE;
    }
}

Prevention

When it happens

Trigger: The loaded coreclr module (libcoreclr.so / coreclr.dll) does not export the requested symbol — a stale or mismatched coreclr build, a stripped binary, or loading the wrong shared library.

Common situations: Build mismatch between corerun and coreclr; coreclr path pointed at a stripped/minified libcoreclr; a corrupted build; using a coreclr that predates an export the host expects.

Related errors


AI-assisted analysis of dotnet/runtime@60108ba66e (2026-08-10). Data as JSON: /api/errors/32e92bb822cbcf0f. Report an issue: GitHub.

Appendix: source

Thrown at src/coreclr/hosts/corerun/corerun.cpp:200

    if (*fptr != nullptr)
        return true;
#else // !TARGET_WASM
    if (!strcmp(symbol, "coreclr_initialize")){
        *fptr = (void*)coreclr_initialize;
        return true;
    } else if (!strcmp(symbol, "coreclr_execute_assembly")){
        *fptr = (void*)coreclr_execute_assembly;
        return true;
    } else if (!strcmp(symbol, "coreclr_shutdown_2")){
        *fptr = (void*)coreclr_shutdown_2;
        return true;
    } else if (!strcmp(symbol, "coreclr_set_error_writer")){
        *fptr = (void*)coreclr_set_error_writer;
        return true;
    }
#endif // !TARGET_WASM

    pal::fprintf(stderr, W("Export '%s' not found.\n"), symbol);
    return false;
}

class logger_t final
{
    const char* _exePath;
    int _propertyCount;
    const char** _propertyKeys;
    const char** _propertyValues;
    const char* _managedAssembly;
    int _argc;
    const char** _argv;
public:
    logger_t(
        const char* exePath,
        int propertyCount, const char** propertyKeys, const char** propertyValues,
        const char* managedAssembly, int argc, const char** argv)
    : _exePath{ exePath }

View on GitHub (pinned to 60108ba66e)