fix load path so
This commit is contained in:
@@ -89,7 +89,7 @@ public:
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief Resolve library path (handle relative paths, search in search_paths)
|
||||
* @brief Resolve library path (absolute, then PNKX_NAV_CORE_LIBRARY_PATH, search_paths_, cwd)
|
||||
* @param library_path Path from config (may be relative or absolute)
|
||||
* @return Resolved absolute path, or empty if not found
|
||||
*/
|
||||
|
||||
@@ -98,7 +98,6 @@ std::string PluginLoaderHelper::findLibraryPath(const std::string& symbol_name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Try LD_LIBRARY_PATH as fallback
|
||||
const char* ld_path = std::getenv("LD_LIBRARY_PATH");
|
||||
if (ld_path) {
|
||||
@@ -199,21 +198,27 @@ std::string PluginLoaderHelper::resolveLibraryPath(const std::string& library_pa
|
||||
return "";
|
||||
}
|
||||
|
||||
// If relative path, search in search_paths (build directory is already added)
|
||||
std::string build_dir = getBuildDirectory();
|
||||
if (!build_dir.empty()) {
|
||||
// First try in build directory
|
||||
// Add .so extension if not present
|
||||
// If relative path, search under PNKX_NAV_CORE_LIBRARY_PATH (':'-separated, like LD_LIBRARY_PATH)
|
||||
const char* nav_lib_path_env = std::getenv("PNKX_NAV_CORE_LIBRARY_PATH");
|
||||
if (nav_lib_path_env) {
|
||||
std::string lib_path_with_ext = library_path;
|
||||
if (lib_path_with_ext.find(".so") == std::string::npos) {
|
||||
lib_path_with_ext += ".so";
|
||||
}
|
||||
std::filesystem::path full_path = std::filesystem::path(build_dir) / lib_path_with_ext;
|
||||
if (std::filesystem::exists(full_path)) {
|
||||
try {
|
||||
return std::filesystem::canonical(full_path).string();
|
||||
} catch (...) {
|
||||
return full_path.string();
|
||||
std::string nav_lib_paths(nav_lib_path_env);
|
||||
std::stringstream ss(nav_lib_paths);
|
||||
std::string base_dir;
|
||||
while (std::getline(ss, base_dir, ':')) {
|
||||
if (base_dir.empty()) {
|
||||
continue;
|
||||
}
|
||||
std::filesystem::path full_path = std::filesystem::path(base_dir) / lib_path_with_ext;
|
||||
if (std::filesystem::exists(full_path)) {
|
||||
try {
|
||||
return std::filesystem::canonical(full_path).string();
|
||||
} catch (...) {
|
||||
return full_path.string();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user