Ссылка cURL lib, но нет файлов lib в каталоге cURL - PullRequest
0 голосов
/ 17 мая 2018

(я знаю, что этот вопрос задавался много раз, но у меня, кажется, есть особый случай)

Я использую gcc (информация о версии ниже) для компиляции программы на C ++, которая очищает жестко запрограммированный URL с помощью libcURL. Я запускаю это на Windows 10.

> gcc -v
Using built-in specs.
COLLECT_GCC=C:\Windows\MinGW\bin\gcc.exe
COLLECT_LTO_WRAPPER=c:/windows/mingw/bin/../libexec/gcc/mingw32/6.3.0/lto-wrapper.exe
Target: mingw32
Configured with: ../src/gcc-6.3.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --target=mingw32 --with-gmp=/mingw --with-mpfr --with-mpc=/mingw --with-isl=/mingw --prefix=/mingw --disable-win32-registry --with-arch=i586 --with-tune=generic --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-6.3.0-1' --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --enable-libgomp --disable-libvtv --enable-nls
Thread model: win32
gcc version 6.3.0 (MinGW.org GCC-6.3.0-1)

У всех найденных мною пакетов libcURL был файл для компиляции. Однако я не хотел использовать эту DLL, потому что все примеры в сети использовали заголовочные файлы, и я хотел, чтобы это был автономный исполняемый файл. В итоге я скачал исходные файлы (ссылка на скачивание мастера: https://curl.haxx.se/dlwiz/?type=source&os=-)

Когда я компилировал свой файл, у меня возникла неопределенная ошибка ссылки. Я получил эту ошибку раньше, когда я не связал правильные .lib файлы. За исключением этого времени, нигде в каталоге cURL не было никаких файлов lib. В некоторых других SO-вопросах говорилось, что для связи используется -lcurl, но нигде не было curl.lib.

Мне нужно получить новый пакет? Или мне нужно установить libcURL? Или что-то еще?

Код:

#include <cstddef>
#include <string>
#include "curl-7.58.0\include\curl\curl.h"

std::string gout;

size_t write_data(char *buffer, size_t size, size_t nmemb, void *usrd){
  gout += buffer;
  return size*nmemb;
}

int geturl(const char* url, std::string out){
  gout = "";
  out = "";
  CURL* hcurl = curl_easy_init();
  if(hcurl) {
    CURLcode res;
    curl_easy_setopt(hcurl, CURLOPT_URL, (char*)url);
    curl_easy_setopt(hcurl, CURLOPT_WRITEFUNCTION, write_data);
    res = curl_easy_perform(hcurl);
    if(res != 0){
      curl_easy_cleanup(hcurl);
      return -1;
    }
    curl_easy_cleanup(hcurl);
    return 0;
  }else{
    curl_easy_cleanup(hcurl);
    return -1;
  }
  return -1;
}

int main(){return 0;}

При компиляции с gcc выдает сообщение об ошибке:

> gcc ./file.cpp -o ./test.exe
C:\Users\user~1\AppData\Local\Temp\cc6XcEeS.o:checkit-proto.cpp:(.text+0x12): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char const*)'
C:\Users\user~1\AppData\Local\Temp\cc6XcEeS.o:checkit-proto.cpp:(.text+0x35): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(char const*)'
C:\Users\user~1\AppData\Local\Temp\cc6XcEeS.o:checkit-proto.cpp:(.text+0x49): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(char const*)'
C:\Users\user~1\AppData\Local\Temp\cc6XcEeS.o:checkit-proto.cpp:(.text+0x51): undefined reference to `_imp__curl_easy_init'
C:\Users\user~1\AppData\Local\Temp\cc6XcEeS.o:checkit-proto.cpp:(.text+0x76): undefined reference to `_imp__curl_easy_setopt'
C:\Users\user~1\AppData\Local\Temp\cc6XcEeS.o:checkit-proto.cpp:(.text+0x93): undefined reference to `_imp__curl_easy_setopt'
C:\Users\user~1\AppData\Local\Temp\cc6XcEeS.o:checkit-proto.cpp:(.text+0xa0): undefined reference to `_imp__curl_easy_perform'
C:\Users\user~1\AppData\Local\Temp\cc6XcEeS.o:checkit-proto.cpp:(.text+0xb6): undefined reference to `_imp__curl_easy_cleanup'
C:\Users\user~1\AppData\Local\Temp\cc6XcEeS.o:checkit-proto.cpp:(.text+0xca): undefined reference to `_imp__curl_easy_cleanup'
C:\Users\user~1\AppData\Local\Temp\cc6XcEeS.o:checkit-proto.cpp:(.text+0xde): undefined reference to `_imp__curl_easy_cleanup'
C:\Users\user~1\AppData\Local\Temp\cc6XcEeS.o:checkit-proto.cpp:(.text+0x109): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
C:\Users\user~1\AppData\Local\Temp\cc6XcEeS.o:checkit-proto.cpp:(.text+0x12a): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()'
collect2.exe: error: ld returned 1 exit status
...