libcurl в Netbeans: «неопределенная ссылка на ...» - PullRequest
0 голосов
/ 30 декабря 2011

Я уже несколько дней пытался получить пример кода libcurl c ++, работающего в Netbeans (Compiler is cygwin) на компьютере с Windows, но он каждый раз выдает ошибку.Я также искал в Интернете (а также через stackoverflow), но не могу найти решение ...: (

Вот только пример кода, который я хочу запустить ...

#include <cstdlib>
#include <curl/curl.h>

using namespace std;

/*
 * 
 */
int main(int argc, char** argv) {
    CURL *curl;
    CURLcode res;

    curl = curl_easy_init();
    if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://google.com");
    res = curl_easy_perform(curl);

    curl_easy_cleanup(curl);
    }

    return 0;
}

вот результат компиляции:

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/cygdrive/c/Users/Alexander/Documents/NetBeansProjects/CppApplication_3'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/Cygwin_4.x_1-Windows/cppapplication_3.exe
make[2]: Entering directory `/cygdrive/c/Users/Alexander/Documents/NetBeansProjects/CppApplication_3'
mkdir -p build/Debug/Cygwin_4.x_1-Windows
rm -f build/Debug/Cygwin_4.x_1-Windows/main.o.d
g++.exe -lcurl   -c -g -MMD -MP -MF build/Debug/Cygwin_4.x_1-Windows/main.o.d -o build/Debug/Cygwin_4.x_1-Windows/main.o main.cpp
mkdir -p dist/Debug/Cygwin_4.x_1-Windows
g++.exe -lcurl    -o dist/Debug/Cygwin_4.x_1-Windows/cppapplication_3 build/Debug/Cygwin_4.x_1-Windows/main.o  
build/Debug/Cygwin_4.x_1-Windows/main.o: In function `main':
/cygdrive/c/Users/Alexander/Documents/NetBeansProjects/CppApplication_3/main.cpp:20: undefined reference to `_curl_easy_init'
/cygdrive/c/Users/Alexander/Documents/NetBeansProjects/CppApplication_3/main.cpp:22: undefined reference to `_curl_easy_setopt'
/cygdrive/c/Users/Alexander/Documents/NetBeansProjects/CppApplication_3/main.cpp:23: undefined reference to `_curl_easy_perform'
/cygdrive/c/Users/Alexander/Documents/NetBeansProjects/CppApplication_3nbproject/Makefile-Debug.mk:61: recipe for target `dist/Debug/Cygwin_4.x_1-Windows/cppapplication_3.exe' failed
make[2]: Leaving directory `/cygdrive/c/Users/Alexander/Documents/NetBeansProjects/CppApplication_3'
nbproject/Makefile-Debug.mk:58: recipe for target `.build-conf' failed
make[1]: Leaving directory `/cygdrive/c/Users/Alexander/Documents/NetBeansProjects/CppApplication_3'
/main.cpp:25: undefined reference to `_curl_easy_cleanup'
nbproject/Makefile-impl.mk:39: recipe for target `.build-impl' failed
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/Cygwin_4.x_1-Windows/cppapplication_3.exe] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 2s)

libcurl также устанавливается как пакет внутри cygwin ... libcurl.a находится по адресу 'E: \ cygwin \ lib' и cygcurl-4.dll находится по адресу 'E: \ cygwin \ bin'.

Если бы кто-нибудь мог мне помочь, это было бы так здорово!

Заранее спасибо! С уважением, Алекс

1 Ответ

0 голосов
/ 30 декабря 2011

Поставьте опцию -l в конце вашей команды ссылки, например:

g++ -o main main.o -lcurl

Так что в вашем случае вывод должен выглядеть так:

g++.exe -o dist/Debug/Cygwin_4.x_1-Windows/cppapplication_3 build/Debug/Cygwin_4.x_1-Windows/main.o -lcurl

Дословно из руководства gcc :

Имеет значение, где в команде вы пишете эту опцию [-l]; компоновщик ищет и обрабатывает библиотеки и объектные файлы в порядке они указаны. Таким образом, foo.o -lz bar.o' searches library z 'после файл foo.o, но до bar.o. Если bar.o ссылается на функции в `z ', эти функции могут быть не загружены.

...