LINUX.ORG.RU

Проблемы с curl_easy_send и с curl_easy_recv(С++, Linux)


0

1

Добрый день! Пытаюсь скомпилировать пример на С++ из http://stackoverflow.com/questions/7441071/regarding-a-handle-for-soap-respon... Почему-то возникают проблемы с curl_easy_send и с curl_easy_recv... curl_easy_send undeclared (first use this function) (Each undeclared identifier is reported only once each function it appears in)

curl_easy_recv undeclared (first use this function)

Если закомментить строчки с вызовами этих функций код компилируется. Не подскажете, с чем может быть проблема?..


Машенька, ну сколько же можно над людьми издеваться? Ты не можешь набрать man curl_easy_send? Там же написано: #include <curl/easy.h>. Ты это написала?

Anon
()
Ответ на: комментарий от Anon

Да, уже по-всякому пробовала и с кавычками и без кавычек(в скобках, как Вы написали). В примере, кстати, не делается данный #include...

Masha
() автор топика
Ответ на: комментарий от Masha

Специально проверил. Даже без добавления easy.h все скомпилилось (код выдрал из того примера 1-в-1).

Подозреваю, что ты не научилась компилять. Вот команда:

gcc aa.c -lcurl -o ex -Wall -Werror
Anon
()
Ответ на: комментарий от Masha

Так g++ -o test main.cpp -lcurl , очевидно, нельзя.

Masha
() автор топика
Ответ на: комментарий от Masha

На кой черт компилить сишный код плюсовым компилятором? Что за извращение?

P.S. Но для извращенцев тоже без проблем компилит:

g++ aa.c -lcurl -Wall -Werror

Anon
()
Ответ на: комментарий от Masha

Да не за что. Это что — курсовой проект?

Кстати, ключи -Wall -Werror советую везде писать.

И еще: как только проект будет содержать больше одного файла, пиши Makefile. Если больше трех файлов — освой cmake или autotools.

Anon
()
Ответ на: комментарий от Anon

У меня не компилируется...В чем может быть проблема тогда тем более непонятно...У меня как-то криво библиотека встала...

Masha
() автор топика
Ответ на: комментарий от Masha

Текст точно скопирован? Никакие символы автозаменой не испортились?

Anon
()

свой код покажи. а то, судя по ошибкам, эти функции воспринимаются не как функции, а как переменные

ananas ★★★★★
()

До сессии далеко вроде.

Не подскажете, с чем может быть проблема?..

Легко.

Вот тебе куча ссылок, выбирай любую.

http://lmgtfy.com/?q= undeclared (first use this function)

Пысы. У меня скомпилилось вообще без поправок.

false ★★★★★
()
Последнее исправление: false (всего исправлений: 1)
Ответ на: комментарий от ananas
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

/* Auxiliary function that waits on the socket. */ 

int main(void)
{
  CURL *curl;
  CURLcode res;
  /* Minimalistic http request */ 
  const char *request = "<?xml version=\"1.0\" encoding=\"utf-8\"?> <S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"xmlns:tns=\"http://ThermodynamicProperties/\"><S:Body> <tns:getSpeciesInformation> <speciesSymbol>CO2</speciesSymbol> <phase>GAS</phase> </tns:getSpeciesInformation> </S:Body> </S:Envelope>";

size_t iolen;

  struct curl_slist *headerlist=NULL;
  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://thermo.sdsu.edu/servlet/ThermodynamicProperties/ThermodynamicPropertiesService");

    /* Do not do the transfer - only connect to host */ 
    curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);


    res = curl_easy_perform(curl);

    if(CURLE_OK != res)
    {
      printf("Error: %s\n", strerror(res));
      return 1;
    }

curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1);
    curl_easy_setopt(curl, CURLOPT_POST, 1);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, request);
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);

    puts("Sending request.");
    /* Send the request. Real applications should check the iolen
     * to see if all the request has been sent */ 
    res = curl_easy_send(curl,request, strlen(request), &iolen);

    if(CURLE_OK != res)
    {
      printf("Error: %s\n", curl_easy_strerror(res));
      return 1;
    }
    puts("Reading response.");

    /* read the response */ 

printf("ok1 \n");
      char buf[10240];
  res = curl_easy_recv(curl, buf, 10240, &iolen);
 printf("ok2 \n");
      if(CURLE_OK != res)

     {
printf("Error: %s\n", strerror(res));

       }
else{  printf("data %s \n", buf);


    }

    /* always cleanup */ 
    curl_easy_cleanup(curl);
  }
  return 0;
}
Masha
() автор топика
Ответ на: комментарий от Masha

Вряд ли имеет значение, но вообще у меня стоит старый RedHat.

Masha
() автор топика
Ответ на: комментарий от Masha

что именно непонятно? что такое выхлоп сборки? это вывод команды, которой вы компилируете данный файл, включая саму команду и версию компилятора.

или непонятно, нафига код надо нормально форматировать? так напустите indent на этот код, и сравните результаты до и после

ananas ★★★★★
()
Последнее исправление: ananas (всего исправлений: 2)
Ответ на: комментарий от Anon

«машенька» ничего не может, судя по всему, я хз как её на работу вообще взяли

lazyklimm ★★★★★
()
Ответ на: комментарий от Masha

установить религия не позволила? и да, это сейчас не главное.

ananas ★★★★★
()
Ответ на: комментарий от Masha

вот код:

#!/bin/bash

ls -got

wget http://www.linux.org.ru/forum/development/9617383/comments -O- -q |
sed 's/</\n</g' |
sed -n '/<code>.*curl\/curl/,/<\/code>/p' |
sed -e 's/<code>//' -e 's/<\/code>//' |
sed 's/\\\\n/~/g' | sed 's/\\n/\n/g' | sed 's/~/\\n/g' |
sed -e 's/&lt;/</g' -e 's/&gt;/>/g' |
sed 's/&quot;/"/g' |
sed 's/&amp;/\&/g' |
sed 's/\\\\/\\/g' |
sed 's/\\\n//g' >out.c

cp out.c out.cpp

gcc out.c   -lcurl -o out.gcc
g++ out.cpp -lcurl -o out.g++

ls -got

md5sum out.*
вот результат работы кода:
./run.sh
итого 4
-rwxr--r-- 1 479 сент. 23 19:45 run.sh
итого 44
-rwxr-xr-x 1 13551 сент. 23 19:45 out.g++
-rwxr-xr-x 1 14658 сент. 23 19:45 out.gcc
-rw-r--r-- 1  1996 сент. 23 19:45 out.cpp
-rw-r--r-- 1  1996 сент. 23 19:45 out.c
-rwxr--r-- 1   479 сент. 23 19:45 run.sh
e47fad5076f1d4ed6ce51260a1f99129  out.c
e47fad5076f1d4ed6ce51260a1f99129  out.cpp
e053fd5d673d2cd7f435dced0fe4fa15  out.g++
9b3cb75082b684a324f74802feb1ca4b  out.gcc
вопрос, что у вас не компилируется?

anonymous
()
Ответ на: комментарий от anonymous

g++ (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5) Copyright (C) 2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

gcc (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5) Copyright (C) 2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Masha
() автор топика
Ответ на: комментарий от Masha

libcurl свежая? А то, может быть, тоже старье 10-летней давности?

И зачем на таком динозавре что-то компилять? Неужто нельзя на своем компьютере собрать?

Anon
()

А ну-ка приведи выхлоп curl --version и grep -R curl_easy_send /usr/include/curl/. У второй должно быть что-то вроде

/usr/include/curl/easy.h: * NAME curl_easy_send()
/usr/include/curl/easy.h:CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer,
Anon
()
Ответ на: комментарий от Masha

побуду ко

Что говорит вывод curl-config --version? Эти функции появились только с версии 7.18.2, в июне 2008. Хватит так толстить уже.

wakuwaku ★★★★
()
Ответ на: комментарий от Anon

curl 7.16.2 (i686-pc-linux-gnu) libcurl/7.16.2 Protocols: tftp ftp telnet dict ldap http file Features: Largefile

grep: /usr/include/curl/ No such file or directory

Masha
() автор топика
Ответ на: комментарий от Anon

curl 7.16.2 (i686-pc-linux-gnu) libcurl/7.16.2 Protocols: tftp ftp telnet dict ldap http file Features: Largefile

grep: /usr/include/curl/ No such file or directory

Masha
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.