diff --git a/.ci/azure/linux_debian.yml b/.ci/azure/linux_debian.yml index 8bbd31c9533..3760bf98e58 100644 --- a/.ci/azure/linux_debian.yml +++ b/.ci/azure/linux_debian.yml @@ -424,8 +424,7 @@ jobs: export IE_APP_PYTHON_PATH=$(PYTHON_SAMPLES_INSTALL_DIR)/ export SHARE=$(INSTALL_TEST_DIR)/smoke_tests/samples_smoke_tests_data/ export WORKSPACE=$(INSTALL_DIR) - # GNA isn't a part of Debian package, so filter out that tests - python3 -m pytest $(INSTALL_TEST_DIR)/smoke_tests/ -k "not GNA" --env_conf $(INSTALL_TEST_DIR)/smoke_tests/env_config.yml -s --junitxml=$(INSTALL_TEST_DIR)/TEST-SamplesSmokeTests.xml + python3 -m pytest $(INSTALL_TEST_DIR)/smoke_tests/ --env_conf $(INSTALL_TEST_DIR)/smoke_tests/env_config.yml -s --junitxml=$(INSTALL_TEST_DIR)/TEST-SamplesSmokeTests.xml displayName: 'Samples Smoke Tests' continueOnError: false diff --git a/src/common/util/CMakeLists.txt b/src/common/util/CMakeLists.txt index 0a683d583e1..9cad18ce17a 100644 --- a/src/common/util/CMakeLists.txt +++ b/src/common/util/CMakeLists.txt @@ -33,9 +33,6 @@ add_library(${TARGET_NAME} STATIC ${LIBRARY_SRC} ${PUBLIC_HEADERS}) add_library(openvino::util ALIAS ${TARGET_NAME}) target_link_libraries(${TARGET_NAME} PRIVATE ${CMAKE_DL_LIBS}) -if (WIN32) - target_link_libraries(${TARGET_NAME} PRIVATE Shlwapi) -endif() target_include_directories(${TARGET_NAME} PUBLIC $) diff --git a/src/common/util/include/openvino/util/shared_object.hpp b/src/common/util/include/openvino/util/shared_object.hpp index f6732ff444b..3f2b307782b 100644 --- a/src/common/util/include/openvino/util/shared_object.hpp +++ b/src/common/util/include/openvino/util/shared_object.hpp @@ -23,15 +23,6 @@ namespace util { */ std::shared_ptr load_shared_object(const char* path); -/** - * @brief Loads a library with absolute path specified. - * Prevents library search in working directory, environment - * variables etc. - * @param path Full path to the plugin library - * @return Reference to shared object - */ -std::shared_ptr load_shared_object_safely(const char* path); - #ifdef OPENVINO_ENABLE_UNICODE_PATH_SUPPORT /** * @brief Loads a library with the wide char name specified. @@ -39,15 +30,6 @@ std::shared_ptr load_shared_object_safely(const char* path); * @return Reference to shared object */ std::shared_ptr load_shared_object(const wchar_t* path); - -/** - * @brief Loads a library with wide char absolute path specified. - * Prevents library search in working directory, environment - * variables etc. - * @param path Full path to the plugin library - * @return Reference to shared object - */ -std::shared_ptr load_shared_object_safely(const wchar_t* path); #endif // OPENVINO_ENABLE_UNICODE_PATH_SUPPORT /** * @brief Searches for a function symbol in the loaded module diff --git a/src/common/util/src/os/lin/lin_shared_object_loader.cpp b/src/common/util/src/os/lin/lin_shared_object_loader.cpp index b7622466f4e..80f64d36e38 100644 --- a/src/common/util/src/os/lin/lin_shared_object_loader.cpp +++ b/src/common/util/src/os/lin/lin_shared_object_loader.cpp @@ -12,14 +12,6 @@ namespace ov { namespace util { -std::shared_ptr load_shared_object_safely(const char* path) { - if (path == nullptr) - throw std::runtime_error("Cannot load library: path isn't specified."); - if (path[0] == '/') - return load_shared_object(path); - throw std::runtime_error("Cannot load library: path '" + static_cast(path) + "' is not absolute."); -} - std::shared_ptr load_shared_object(const char* path) { auto shared_object = std::shared_ptr{dlopen(path, RTLD_NOW), [](void* shared_object) { if (shared_object != nullptr) { @@ -44,10 +36,6 @@ std::shared_ptr load_shared_object(const char* path) { } #ifdef OPENVINO_ENABLE_UNICODE_PATH_SUPPORT -std::shared_ptr load_shared_object_safely(const wchar_t* path) { - return load_shared_object_safely(ov::util::wstring_to_string(path).c_str()); -} - std::shared_ptr load_shared_object(const wchar_t* path) { return load_shared_object(ov::util::wstring_to_string(path).c_str()); } diff --git a/src/common/util/src/os/win/win_shared_object_loader.cpp b/src/common/util/src/os/win/win_shared_object_loader.cpp index 16dcaa342fe..76da4eed9b6 100644 --- a/src/common/util/src/os/win/win_shared_object_loader.cpp +++ b/src/common/util/src/os/win/win_shared_object_loader.cpp @@ -70,18 +70,9 @@ #endif #include -#include namespace ov { namespace util { -std::shared_ptr load_shared_object_safely(const char* path) { - if (path == nullptr) - throw std::runtime_error("Cannot load library: path isn't specified."); - if (!PathIsRelativeA(path)) - return load_shared_object(path); - throw std::runtime_error("Cannot load library: path '" + static_cast(path) + "' is not absolute."); -} - std::shared_ptr load_shared_object(const char* path) { void* shared_object = nullptr; using GetDllDirectoryA_Fnc = DWORD (*)(DWORD, LPSTR); @@ -133,14 +124,6 @@ std::shared_ptr load_shared_object(const char* path) { } #ifdef OPENVINO_ENABLE_UNICODE_PATH_SUPPORT -std::shared_ptr load_shared_object_safely(const wchar_t* path) { - if (path == nullptr) - throw std::runtime_error("Cannot load library: path isn't specified."); - if (!PathIsRelativeW(path)) - return load_shared_object(path); - throw std::runtime_error("Cannot load library: path '" + ov::util::wstring_to_string(std::wstring(path)) + "' is not absolute."); -} - std::shared_ptr load_shared_object(const wchar_t* path) { void* shared_object = nullptr; using GetDllDirectoryW_Fnc = DWORD (*)(DWORD, LPWSTR); diff --git a/src/inference/include/openvino/runtime/core.hpp b/src/inference/include/openvino/runtime/core.hpp index 49ec714b33e..b0bef7f4a1d 100644 --- a/src/inference/include/openvino/runtime/core.hpp +++ b/src/inference/include/openvino/runtime/core.hpp @@ -603,10 +603,10 @@ public: * @param plugin_name Name of a plugin. Depending on platform, `plugin_name` is wrapped with shared library suffix * and prefix to identify library full name. * For example, on Linux platform, plugin name specified as `plugin_name` will be wrapped as `libplugin_name.so`. - * Note that plugin should be located in one of next places: - * - the same directory as OpenVINO runtime library as is - * - the same directory as OpenVINO runtime library inside openvino- subdirectory - * (environment variables like PATH/LD_LIBRARY_PATH/DYLD_LIBRARY_PATH are ignored) + * Plugin search algorithm: + * - If plugin is located in the same directory as OpenVINO runtime library, it will be used. + * - If no, plugin is tried to be loaded from paths pointed by PATH/LD_LIBRARY_PATH/DYLD_LIBRARY_PATH + * environment variables depending on the platform. * * @param device_name Device name to register a plugin for. */ diff --git a/src/inference/src/ie_core.cpp b/src/inference/src/ie_core.cpp index 37d1543fd6d..76fd36349ea 100644 --- a/src/inference/src/ie_core.cpp +++ b/src/inference/src/ie_core.cpp @@ -107,6 +107,7 @@ ov::util::FilePath getPluginPath(const std::string& pluginName, bool needAddSuff #ifndef _WIN32 try { + // dlopen works with absolute paths; otherwise searches from LD_LIBRARY_PATH pluginPath = ov::util::to_file_path(ov::util::get_absolute_file_path(pluginName)); } catch (const std::runtime_error&) { // failed to resolve absolute path; not critical @@ -133,7 +134,11 @@ ov::util::FilePath getPluginPath(const std::string& pluginName, bool needAddSuff // 2. in the openvino.so location absFilePath = FileUtils::makePath(ieLibraryPath, pluginPath); - return absFilePath; + if (FileUtils::fileExist(absFilePath)) + return absFilePath; + + // 3. in LD_LIBRARY_PATH on Linux / PATH on Windows + return pluginPath; } template @@ -1156,7 +1161,7 @@ public: desc.pluginCreateFunc(plugin_impl); plugin = InferencePlugin{plugin_impl, {}}; } else { - so = ov::util::load_shared_object_safely(desc.libraryLocation.c_str()); + so = ov::util::load_shared_object(desc.libraryLocation.c_str()); std::shared_ptr plugin_impl; reinterpret_cast( ov::util::get_symbol(so, InferenceEngine::create_plugin_function))(plugin_impl); diff --git a/src/inference/tests/functional/ov_shared_object_test.cpp b/src/inference/tests/functional/ov_shared_object_test.cpp index 444bc61e08f..bfd82d9747a 100644 --- a/src/inference/tests/functional/ov_shared_object_test.cpp +++ b/src/inference/tests/functional/ov_shared_object_test.cpp @@ -60,9 +60,3 @@ TEST_F(SharedObjectOVTests, canCallExistedMethod) { std::shared_ptr ptr; EXPECT_NO_THROW(factory(ptr)); } - -TEST_F(SharedObjectOVTests, loadSOSafelyThrowIfOnlyLibName) { - std::string libraryName = FileUtils::makePluginLibraryName({}, std::string("mock_engine") + IE_BUILD_POSTFIX); - - EXPECT_THROW(ov::util::load_shared_object_safely(libraryName.c_str()), std::runtime_error); -} \ No newline at end of file