(я знаю, что этот вопрос задавался много раз, но у меня, кажется, есть особый случай)
Я использую 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