Kurento: библиотека ссылок в модуле OpenCV

Я пишу модуль OpenCV для работы с Kurento Media Server. Я читаю файл с URL-адреса, используя lib curl.

Код у меня следующий:

#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 не найден ни в одной из библиотек
dpkg-shlibdeps: предупреждение: символ curl_easy_perform не найден ни в одной из библиотек
dpkg-shlibdeps: предупреждение: символ curl_easy_setopt не найден ни в одной из библиотек
dpkg-shlibdeps: предупреждение: символ curl_easy_init не найден ни в одной из библиотек

Я предполагаю, что есть проблема со связыванием библиотек в CMakeLists.txt

Итак, как мне связать эти библиотеки?
Является ли 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} )

person Community    schedule 07.04.2016    source источник
comment
Вы можете найти пример target_link_libraries здесь.   -  person igracia    schedule 07.04.2016
comment
Как вы их связываете сейчас?   -  person santoscadenas    schedule 07.04.2016
comment
Я пробовал: target_link_libraries (curl) и SET(${CURL_LIBRARIES}) Оба не работали.   -  person    schedule 07.04.2016
comment
Попробуйте отредактировать свой вопрос с тем, что вы пробовали, и с вашим файлом CMakeList.txt (по крайней мере, соответствующие части)   -  person santoscadenas    schedule 07.04.2016
comment
@santoscadenas, я не знаю, как их связать, поэтому я не добавил это в вопрос. Обычно я даю имя исполняемого файла, которое, я полагаю, здесь не сработает.   -  person    schedule 08.04.2016
comment
Просто скопируйте соответствующие части файла cmake, чтобы узнать, как вы создаете модуль.   -  person santoscadenas    schedule 08.04.2016
comment
Я сохранил его в том виде, в котором он был сгенерирован, так как я не знаю правильного синтаксиса, за исключением одной строки. Но я добавлю в этой части.   -  person    schedule 08.04.2016
comment
В варианте 1 как вы определяете переменные CURL_*?   -  person santoscadenas    schedule 08.04.2016
comment
@santoscadenas, я нет. Я нашел этот код как предложение к другому вопросу и попробовал его. Я понятия не имею, как я должен связать это.   -  person    schedule 08.04.2016


Ответы (2)


В основной папке проекта CMakeLists.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}
)
person santoscadenas    schedule 08.04.2016

Я попробовал ответ santoscadenas, но это не сработало.

Мне пришлось изменить curl на libcurl в CMakeLists.txt проекта основной папки:

pkg_check_modules(CURL REQUIRED libcurl)
person lukas    schedule 04.10.2017