LINUX.ORG.RU

Использование библиотеки curl


0

2

Добрый день! Не подскажете, в чем может быть проблема? Не запускается приложение, использующее библиотеку curl.

Собрала приложение g++ -o test main.cpp -lcurl.

Все в порядке, но при запуске, наблюдаю следующее: ./test: error while loading shared libraries: libcurl. so. 4 : cannot open shared object file : No such file o directory


Ответ на: комментарий от NeverLoved

Извините, не поняла Вас. Библиотеку я вроде поставила. ОС Red Hat 2.4. Приложение нормально компилируется, ошибка возникает при запуске.

#include <stdio.h> #include <curl/curl.h> //главная функция int main(void) { //уже знакомый объект CURL CURL *curl; //объект - результат вызова функции curl_easy_perform CURLcode res; //выполняем инициализацю curl = curl_easy_init(); if(curl) { //проверяем //задаем опцию - получить страницу по адресу http://google.com curl_easy_setopt(curl, CURLOPT_URL, «google.com»); //указываем прокси сервер curl_easy_setopt(curl, CURLOPT_PROXY, «proxy:8080»); //задаем опцию отображение заголовка страницы curl_easy_setopt(curl, CURLOPT_HEADER, 1); //вызываем функцию, выполняющюю все операции, заданные в опциях (получение страницы, передача данных и т.д.), результат - объект типа CURLcode res = curl_easy_perform(curl); //выполняем обязательное завершение сессии curl_easy_cleanup(curl); } return 0; }

Masha
() автор топика

Дай-ка угадаю: собираешь на одном компьютере, а запускаешь на другом? Тогда линкуй статически. И под i686 на всякий пожарный.

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

Дык, курлобиблиотека-то системная, она в какой-нибудь дыре не может торчать.

Вердикт: разные машины, на другой установлена не та версия курлы (или вообще не установлена).

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

в общем, ванга из меня никудышняя, да. Ждём отзывов ТС

gavlig ★★★
()

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

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

libcurl.so.4 => not found libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x4001c000) libm.so.6 => /lib/tls/libm.so.6 (0x400cf000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x400f1000) libc.so.6 => /lib/tls/libc.so.6 (0x42000000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

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

Я вижу,что не хватает libcurl.so.4, но что с этим делать?

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

Компилю и запускаю на одном и том же компьютере.

А можно `locate libcurl`?

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

ну это же цитата из боянистого анекдота 10-15 летней давности.

Маша очень любит, чтобы за неё делали работу (ну или хотя бы подробно разжёвывали), хотя, казалось бы, за столько лет можно было бы и научиться осиливать.

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

Быть такого не может! А ну-ка, пожалуйста, поподробнее, но компилять строчкой

g++ -Wall -Werror -o test main.cpp -lcurl

Выхлоп g++ (только ошибки) — в студию!

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

Блин, Маша! У тебя же нифига не плюсы, а гольный С! На кой фиг тебе g++?

Компиляй так:

gcc -Wall -Werror -o test main.cpp -lcurl
Anon
()
Ответ на: комментарий от pathfinder

Если кому-то будет нужно, необходимо просто подложить библиотеки по тому пути, где Linux ожидает их найти, то есть в папку /lib или /usr/lib

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

Возможно она компиляла из какой-нибудь IDE. Там все эти флаги и опции обычно разнесены по разным местам

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

Интересно: а как ты умудрилась скомпилить?

да очень просто. при сборке линкер клал с прибором на /etc/ld.so.cache. а в рантайме ld.so берет инфу о либах по стандартным путям именно оттуда.

можешь провести эксперимент. снеси libcurl, обнови кэш библиотек, и установи ее руками с префиксом /usr и не выполняя ldconfig. потом попробуй собрать тестовый пример. пример соберется нормально, но при запуске будет нудеть про отсутствие libcurl. до тех пор, пока не будет обновлен ld.so.cache или /usr/lib не будет явно прописан в LD_LIBRARY_PATH

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