Как использовать libcurl в C ++ Builder - PullRequest
0 голосов
/ 14 сентября 2018

Я скачал стандартную для libcurl версию для win xp. Я использую C ++ Builder 2007.

Я добавил * curl \ include в папке Project-> Options-> Paths and Defines -> [Включить путь] Папка * curl \ lib в Project-> Options-> Paths and Defines -> [Путь к библиотеке]

Я создал простой проект с main.h как:

#ifndef mainH
#define mainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <curl/curl.h>
#include <curl/easy.h>
#include <stdio.h>
//---------------------------------------------------------------------------
class TForm3 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
    __fastcall TForm3(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm3 *Form3;
//---------------------------------------------------------------------------
#endif

и main.cpp как:

#include <vcl.h>
#pragma hdrstop

#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//#pragma comment(lib, "C:\Dev\Curl\bin\libcurl.dll")
//#pragma comment(lib, "C:\Dev\Curl\lib\libcurl.a")
//#pragma comment(lib, "C:\Dev\Curl\lib\libcurl.dll.a")
TForm3 *Form3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button1Click(TObject *Sender)
{
    CURL *curl;
    CURLcode res;

curl = curl_easy_init();
if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
    /* example.com is redirected, so we tell libcurl to follow redirection */ 
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);

    /* Perform the request, res will get the return code */ 
    res = curl_easy_perform(curl);
    /* Check for errors */ 
    if(res != CURLE_OK)
    fprintf(stderr, "curl_easy_perform() failed: %s\n",
            curl_easy_strerror(res));

    /* always cleanup */ 
        curl_easy_cleanup(curl);
}
}
//---------------------------------------------------------------------------

Когда я запускаю программу, я получаю ошибку компоновщика как:

[ILINK32 Error] Error: Unresolved external '_curl_easy_init' referenced from C:\DOCUMENTS AND SETTINGS\VATISH\DESKTOP\LIBCURLDEMO\DEBUG\MAIN.OBJ
[ILINK32 Error] Error: Unresolved external '_curl_easy_setopt' referenced from C:\DOCUMENTS AND SETTINGS\VATISH\DESKTOP\LIBCURLDEMO\DEBUG\MAIN.OBJ
[ILINK32 Error] Error: Unresolved external '_curl_easy_perform' referenced from C:\DOCUMENTS AND SETTINGS\VATISH\DESKTOP\LIBCURLDEMO\DEBUG\MAIN.OBJ
[ILINK32 Error] Error: Unresolved external '_curl_easy_strerror' referenced from C:\DOCUMENTS AND SETTINGS\VATISH\DESKTOP\LIBCURLDEMO\DEBUG\MAIN.OBJ
[ILINK32 Error] Error: Unresolved external '_curl_easy_cleanup' referenced from C:\DOCUMENTS AND SETTINGS\VATISH\DESKTOP\LIBCURLDEMO\DEBUG\MAIN.OBJ

На основании моего поиска мне нужен файл libcurl.lib, чтобы удовлетворить компоновщик, но такого файла нет в папке установки libcurl.

Пожалуйста, предложите, как это можно решить.

Обновление : я получаю libcurl.lib, используя Borland\RAD Studio\5.0\bin>implib -a libcurl.lib libcurl.dll, и проект не жалуется на libcurl.lib, но теперь он хочет libcrypto-1_1-x64.dll файл ("Не удалось запустить приложение, потому что libcrypto-1_1- x64.dll не был найден. Переустановка приложения может решить проблему «ошибка, выданная BCB). Я попытался загрузить файл libcrypto-1_1-x64.dll из Интернета, но получил сообщение "Приложение или DLL \ Borland \ RAD Studio \ 5.0 \ bin \ libcrypto-1_1-x64.dll не является допустимым образом Windows."

Обновление 2: Я попытался добавить libcurl.lib как динамически, так и статически, но все еще сталкиваюсь с одной и той же ошибкой, т. Е. «Не удалось запустить приложение, поскольку libcrypto-1_1-x64.dll не был найден . Повторная установка приложения может решить проблему ".

Примечание: Я работаю над 32-разрядной версией Windows XP, а мое приложение - 32-разрядной.

Есть предложения?

1 Ответ

0 голосов
/ 22 сентября 2018

Я скачал пару файлов zip около недели назад и использовал tdump для просмотра импорта dll.Один из zip-файлов был импортирован из 64-битного файла libcrypto-1_1-x64.dll (целевой тип процессора 80386).

Я скачал и протестировал сегодня, и он правильно импортирует из libcrypto-1_1.dll.

В настоящее время правильная версия zip-файла имеет размер 2966 КБ в папке Windows, 2,89 МБ в свойствах и 2,9 МБ на веб-сайтах.

Примечание для мудрых: - 32-разрядный и64-разрядные версии имеют разные имена DLL.

  • Win 32 - это libcurl.dll
  • Win 64 - это libcurl-x64.dll
...