2015-08-20 2 views
0

Я использую звездочку версии 13.5.0. В Utils каталоге, я создал новый модуль под названием curl_util с исходным кодом, как показано ниже:curl_easy_getinfo undefined ошибка символа

#include "asterisk/curl_utils.h" 
HttpResponse * httpResponseNew() 
{ 
    HttpResponse * response = calloc(1, sizeof(HttpResponse)); 

    return response; 
error: 
    return NULL; 
} 

HttpResponse * httpRequestPost(char *url, char *post_body, size_t size) 
{ 
    struct MemoryStruct chunk; 
    CURL *curl = curl_easy_init(); 

    chunk.memory = malloc(1); 
    chunk.size = 0; 

    HttpResponse *response = httpResponseNew(); 
    curl_easy_setopt(curl, CURLOPT_URL, url); 
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 0); 
    curl_easy_setopt(curl, CURLOPT_POST, 1L); 
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post_body); 
    curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, size); 
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30); 
    curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); 
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HttpResponseMemoryWriter); 
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk); 

    response->res = curl_easy_perform(curl); 

    if (response->res != CURLE_OK) 
    { 
     response->OK = 0; 
    } 
    else 
    { 
     response->OK = 1; 
     response->size = chunk.size; 
     response->body = chunk.memory; 
    } 

    curl_easy_cleanup(curl); 

    return response; 

error: 
    free(chunk.memory); 
    if (curl) curl_easy_cleanup(curl); 
    return response; 
} 

В chan_sip.c, я называю выше упомянутой httpRequestPost функции. Выполнение make и make install в порядке. Но при запуске DAHDI и звездочку, я получил следующее сообщение об ошибке:

Ошибка загрузки модуля chan_sip.so: не определен символ: httpRequestPost

loader.c: модуль chan_sip.so не может быть загружен.

Не могли бы вы дать подсказки или советы, чтобы исправить эту ошибку? Спасибо заранее.

+0

Возможно, это связано с порядком загрузки модуля? см. [книгу] (http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/additional_configuration_tasks-modules-conf-file.html) для информации по заказу на загрузку – QuickDanger

+0

Спасибо. Для моего случая я предположил, что curl_util не связан для make-файла, чтобы его построить, хотя в Makefile путь к curl_util уже включен. Итак, я попытался переместить вышеуказанный исходный код на chan_sip.c, после чего ошибка исчезла. Однако, я получаю еще одну ошибку: Ошибка загрузки модуля chan_sip.so: undefined symbol: curl_easy_getinfo. loader.c: модуль chan_sip.so не может быть загружен. – Aloha

+0

Интересно, есть ли у звездочки функция, которая анализирует содержимое xml с URL-адреса, аналогичного функции httpRequestPost(), указанной выше. Кто-нибудь знает? – Aloha

ответ

0

Я зафиксировал ошибку, выполнив следующую процедуру:

Remove libcurl4-OpenSSL-DEV

Скачать CURL из http://curl.haxx.se/, разархивировать, запустить команды ./configure, заставлю установить

Редактировать Makefile из звездочка, добавив -lcurl для компиляции флагов.

0

Не нужно редактировать make-файл. Вам просто нужно использовать опцию компилятора ASTLDFLAGS, например:

./configure 
make ASTLDFLAGS="-lcurl" 
make install 
make samples 
make config 
Смежные вопросы