router-for-me/CLIProxyAPI · error
dlopen %s: %s
Error message
dlopen %s: %s
What it means
Error "dlopen %s: %s" thrown in router-for-me/CLIProxyAPI.
Source
Thrown at internal/pluginhost/loader_unix.go:117
type dynamicLibraryClient struct {
handle unsafe.Pointer
hostAPI *C.cliproxy_host_api
hostCtx unsafe.Pointer
api C.cliproxy_plugin_api
}
func defaultPluginLoader() pluginLoader {
return dynamicLibraryLoader{}
}
func (dynamicLibraryLoader) Open(file pluginFile, host *Host) (pluginClient, error) {
cPath := C.CString(file.Path)
defer C.free(unsafe.Pointer(cPath))
handle := C.cliproxy_dlopen(cPath)
if handle == nil {
return nil, fmt.Errorf("dlopen %s: %s", file.Path, dlerrorString())
}
cSymbol := C.CString("cliproxy_plugin_init")
initSymbol := C.cliproxy_dlsym(handle, cSymbol)
C.free(unsafe.Pointer(cSymbol))
if initSymbol == nil {
C.cliproxy_dlclose(handle)
return nil, fmt.Errorf("missing cliproxy_plugin_init: %s", dlerrorString())
}
hostAPI := (*C.cliproxy_host_api)(C.malloc(C.size_t(unsafe.Sizeof(C.cliproxy_host_api{}))))
if hostAPI == nil {
C.cliproxy_dlclose(handle)
return nil, fmt.Errorf("allocate host api")
}
hostCtx := C.malloc(C.size_t(unsafe.Sizeof(C.uintptr_t(0))))
if hostCtx == nil {
C.free(unsafe.Pointer(hostAPI))View on GitHub (pinned to 78f0c4079e)
Solutions
- Verify the plugin library path exists and matches the host platform/architecture.
- Install the plugin's missing shared-library dependencies reported by dlopen.
When it happens
Trigger: Thrown at internal/pluginhost/loader_unix.go:117 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15).
Data as JSON: /api/errors/642ae45aaf867284.
Report an issue: GitHub.