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
- Rebuild coreclr and corerun together so exported symbols match.
- Verify the symbol exists: `nm -D libcoreclr.so | grep coreclr_initialize` (Linux) or `dumpbin /exports coreclr.dll` (Windows).
- Confirm the coreclr path passed to corerun is the freshly built module.
- 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
- Build corerun and coreclr from the same source tree and version.
- Never strip exported symbols from libcoreclr when packaging.
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
- %s
- BEGIN: coreclr_execute_assembly failed - Error: 0x%08x
- BEGIN: coreclr_initialize failed - Error: 0x%08x
- Cannot find System.Private.CoreLib.dll at
- Collection 'smoke_tests' is only available for 'nativeaot'…
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)