1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-30 07:43:03 +04:00

ocl: Fix OpenCL library detection in Linux

OpenCL runtime does not require OpenCL development file (libOpenCL.so),
just the "run" library (so.1).

This patch searches for the run library (so.1) if the dev library (.so)
is not found.

Web search shows that this error has been present since at least 2015
http://answers.opencv.org/question/80532/haveopencl-return-false/

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
This commit is contained in:
Ricardo Ribalda Delgado
2017-08-23 15:45:38 +02:00
parent 179ef0a975
commit 6fc5697950
@@ -134,6 +134,24 @@ static void* WinGetProcAddress(const char* name)
#include <dlfcn.h>
#include <stdio.h>
static void *GetHandle(const char *file)
{
void *handle;
handle = dlopen(file, RTLD_LAZY | RTLD_GLOBAL);
if (!handle)
return NULL;
if (dlsym(handle, OPENCL_FUNC_TO_CHECK_1_1) == NULL)
{
fprintf(stderr, ERROR_MSG_INVALID_VERSION);
dlclose(handle);
return NULL;
}
return handle;
}
static void* GetProcAddress(const char* name)
{
static bool initialized = false;
@@ -143,20 +161,18 @@ static void* GetProcAddress(const char* name)
cv::AutoLock lock(cv::getInitializationMutex());
if (!initialized)
{
const char* path = "libOpenCL.so";
const char* envPath = getenv("OPENCV_OPENCL_RUNTIME");
if (envPath)
path = envPath;
handle = dlopen(path, RTLD_LAZY | RTLD_GLOBAL);
if (handle == NULL)
{
if (envPath)
handle = GetHandle(envPath);
if (!handle)
fprintf(stderr, ERROR_MSG_CANT_LOAD);
}
else if (dlsym(handle, OPENCL_FUNC_TO_CHECK_1_1) == NULL)
else
{
fprintf(stderr, ERROR_MSG_INVALID_VERSION);
handle = NULL;
handle = GetHandle("libOpenCL.so");
if (!handle)
handle = GetHandle("libOpenCL.so.1");
}
initialized = true;
}