Компилирование и линковка curl, простой интерфейс с C ++ - PullRequest
0 голосов
/ 08 мая 2019

Контекст

Попытка запустить этот curl_easy_init - запустить простой сеанс libcurl в моей программе на C ++.Библиотека curl имеет большой выбор API, включая simple post и многие другие, но я застрял на том, как правильно настроить мой этап компиляции и компоновки.Я обратился к руководству по curl website для получения инструкций по компиляции и привязке этой библиотеки к моей программе, но все еще сталкиваюсь с этой ошибкой.

curl находится здесь

ᴾᴋᴹɴ Master Red ▰ ◓ ◓ ◓ ◓ ◓ ◓ 

> curl-config --cflags
-I/usr/local/Cellar/curl/7.64.1/include

библиотеки curl включают

ᴾᴋᴹɴ Master Red ▰ ◓ ◓ ◓ ◓ ◓ ◓ 

> curl-config --libs
-L/usr/local/Cellar/curl/7.64.1/lib -lcurl -lldap -lz

Даже после добавления в мой путь включения все равно появляется та же ошибка.

# c++ curl support for the g++ compiler
# curl-config --cflags
CPLUS_INCLUDE_PATH="/usr/local/Cellar/curl/7.64.1/include:${CPLUS_INCLUDE_PATH}"
# curl-config --libs which include -lcurl -lldap -lz
CPLUS_INCLUDE_PATH="/usr/local/Cellar/curl/7.64.1/lib:${CPLUS_INCLUDE_PATH}"
export CPLUS_INCLUDE_PATH

Ошибка

ᴾᴋᴹɴ Master Red ▰ ◓ ◓ ◓ ◓ ◓ ◓ 

> g++ -std=c++17 main.cpp && ./a.out
Undefined symbols for architecture x86_64:
  "_curl_easy_cleanup", referenced from:
      _main in main-9d2f7a.o
  "_curl_easy_init", referenced from:
      _main in main-9d2f7a.o
  "_curl_easy_perform", referenced from:
      _main in main-9d2f7a.o
  "_curl_easy_setopt", referenced from:
      _main in main-9d2f7a.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Источник

#include <curl/curl.h>
#include <iostream>
#include <stdio.h>
#include <string.h>

int main()
{
    CURL *curl = curl_easy_init();
    if(curl) {
        CURLcode res;
        curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
    }
}

1 Ответ

0 голосов
/ 09 мая 2019

Используйте вместо этого make-файл, вызовите make в командной строке, и все готово

# *****************************************************
# Variables to control Makefile operation

CXX = g++

# ****************************************************
# Targets needed to bring the executable up to date

main: main.cpp
    $(CXX) main.cpp -I/usr/local/Cellar/curl/7.64.1/include -L/usr/local/Cellar/curl/7.64.1/lib -lcurl -lldap -lz && ./a.out
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...