Kurento:Link OpenCV 模块中的库
Kurento: Link library in OpenCV module
我正在编写一个与 Kurento 媒体服务器一起使用的 OpenCV 模块。
我正在使用 lib curl 从 URL 读取文件。
我的代码如下:
#include<curl/curl.h>
size_t write_data(char *ptr, size_t size, size_t nmemb, void *userdata)
{
vector<uchar> *stream = (vector<uchar>*)userdata;
size_t count = size * nmemb;
stream->insert(stream->end(), ptr, ptr + count);
return count;
}
Mat curlImg(const char *img_url, int timeout=10)
{
vector<uchar> stream;
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, img_url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &stream);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
return imdecode(stream, -1);
}
Mat image = curlImg(link);
构建时:我收到以下警告并且未安装生成的包:
dpkg-shlibdeps:警告:符号 curl_easy_cleanup 在库 none 中找到
dpkg-shlibdeps:警告:符号 curl_easy_perform 在库 none 中找到
dpkg-shlibdeps:警告:符号 curl_easy_setopt 在库 none 中找到
dpkg-shlibdeps:警告:符号 curl_easy_init 在库 none 中找到
我的猜测是 linking CMakeLists.txt 中的库有问题
那么我应该如何 link 这些库呢?
target_link_libraries() 是正确的方法吗?如果是这样,语法是什么?
编辑:
这些是我到目前为止尝试过的方法。
1
SET(requiredlibs)
FIND_PACKAGE(CURL)
IF(CURL_FOUND)
INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR})
SET(requiredlibs ${requiredlibs} ${CURL_LIBRARIES} )
ELSE(CURL_FOUND)
MESSAGE(FATAL_ERROR "Could not find the CURL library and development files.")
ENDIF(CURL_FOUND)
2
target_link_libraries (curl)
3
SET(${CURL_LIBRARIES} )
在主文件夹projectCMakeLists.txt
其他需求完成的地方,需要添加:
pkg_check_modules(CURL REQUIRED curl)
然后在文件夹src/server
中你需要修改CMakeLists.txt文件如下:
generate_code (
MODELS ${CMAKE_CURRENT_SOURCE_DIR}/interface
SERVER_STUB_DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/implementation/objects
SERVER_IMPL_LIB_EXTRA_LIBRARIES ${CURL_LIBRARIES}
)
我试过,但没用。
我必须在主文件夹项目的 CMakeLists.txt
中将 curl
更改为 libcurl
:
pkg_check_modules(CURL REQUIRED libcurl)
我正在编写一个与 Kurento 媒体服务器一起使用的 OpenCV 模块。 我正在使用 lib curl 从 URL 读取文件。
我的代码如下:
#include<curl/curl.h>
size_t write_data(char *ptr, size_t size, size_t nmemb, void *userdata)
{
vector<uchar> *stream = (vector<uchar>*)userdata;
size_t count = size * nmemb;
stream->insert(stream->end(), ptr, ptr + count);
return count;
}
Mat curlImg(const char *img_url, int timeout=10)
{
vector<uchar> stream;
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, img_url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &stream);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
return imdecode(stream, -1);
}
Mat image = curlImg(link);
构建时:我收到以下警告并且未安装生成的包:
dpkg-shlibdeps:警告:符号 curl_easy_cleanup 在库 none 中找到
dpkg-shlibdeps:警告:符号 curl_easy_perform 在库 none 中找到
dpkg-shlibdeps:警告:符号 curl_easy_setopt 在库 none 中找到
dpkg-shlibdeps:警告:符号 curl_easy_init 在库 none 中找到
我的猜测是 linking CMakeLists.txt 中的库有问题
那么我应该如何 link 这些库呢?
target_link_libraries() 是正确的方法吗?如果是这样,语法是什么?
编辑:
这些是我到目前为止尝试过的方法。
1
SET(requiredlibs)
FIND_PACKAGE(CURL)
IF(CURL_FOUND)
INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR})
SET(requiredlibs ${requiredlibs} ${CURL_LIBRARIES} )
ELSE(CURL_FOUND)
MESSAGE(FATAL_ERROR "Could not find the CURL library and development files.")
ENDIF(CURL_FOUND)
2
target_link_libraries (curl)
3
SET(${CURL_LIBRARIES} )
在主文件夹projectCMakeLists.txt
其他需求完成的地方,需要添加:
pkg_check_modules(CURL REQUIRED curl)
然后在文件夹src/server
中你需要修改CMakeLists.txt文件如下:
generate_code (
MODELS ${CMAKE_CURRENT_SOURCE_DIR}/interface
SERVER_STUB_DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/implementation/objects
SERVER_IMPL_LIB_EXTRA_LIBRARIES ${CURL_LIBRARIES}
)
我试过
我必须在主文件夹项目的 CMakeLists.txt
中将 curl
更改为 libcurl
:
pkg_check_modules(CURL REQUIRED libcurl)