Неопределенные символы для архитектуры x86_64 (curlpp)

В проекте, над которым я работаю, я пытаюсь использовать curlpp библиотека, чтобы сделать простой HTML-запрос GET. Я передаю файл cpp в clang ++ со следующими параметрами:

clang++ -std=c++11 -stdlib=libc++ -I /usr/local/Cellar url_test.cpp

Я тогда получаю эти ошибки:

Undefined symbols for architecture x86_64:
"curlpp::OptionBase::OptionBase(CURLoption)", referenced from:
curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::Option(CURLoption, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in url_test-541b93.o
"curlpp::OptionBase::~OptionBase()", referenced from:
curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::Option(CURLoption, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in url_test-541b93.o
curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::~Option() in url_test-541b93.o
"curlpp::UnsetOption::UnsetOption(char const*)", referenced from:
curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::updateMeToOption(curlpp::OptionBase const&) in url_test-541b93.o
curlpp::OptionTrait<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, (CURLoption)10002>::updateHandleToMe(curlpp::internal::CurlHandle*) const in url_test-541b93.o
curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::getValue() const in url_test-541b93.o
"curlpp::RuntimeError::~RuntimeError()", referenced from:
curlpp::UnsetOption::~UnsetOption() in url_test-541b93.o
"curlpp::libcurlRuntimeAssert(char const*, CURLcode)", referenced from:
void curlpp::internal::CurlHandle::option<void*>(CURLoption, void*) in url_test-541b93.o
"curlpp::Easy::perform()", referenced from:
_main in url_test-541b93.o
"curlpp::Easy::Easy()", referenced from:
_main in url_test-541b93.o
"curlpp::Easy::~Easy()", referenced from:
_main in url_test-541b93.o
"curlpp::Cleanup::Cleanup()", referenced from:
_main in url_test-541b93.o
"curlpp::Cleanup::~Cleanup()", referenced from:
_main in url_test-541b93.o
"curlpp::OptionBase::operator<(curlpp::OptionBase const&) const", referenced from:
vtable for curlpp::OptionTrait<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, (CURLoption)10002> in url_test-541b93.o
vtable for curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > in url_test-541b93.o
"typeinfo for curlpp::LogicError", referenced from:
GCC_except_table0 in url_test-541b93.o
"typeinfo for curlpp::OptionBase", referenced from:
curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::updateMeToOption(curlpp::OptionBase const&) in url_test-541b93.o
typeinfo for curlpp::Option<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > in url_test-541b93.o
"typeinfo for curlpp::RuntimeError", referenced from:
GCC_except_table0 in url_test-541b93.o
typeinfo for curlpp::UnsetOption in url_test-541b93.o
"_curl_easy_setopt", referenced from:
void curlpp::internal::CurlHandle::option<void*>(CURLoption, void*) in url_test-541b93.o
ld: symbol(s) not found for architecture x86_64

что, я думаю, означает, что компилятор не может найти ни одну из библиотек curlpp.

Вот код, который я пытаюсь запустить:

  1 #include <string>
2 #include <sstream>
3 #include <iostream>
4 #include <curlpp/cURLpp.hpp>
5 #include <curlpp/Easy.hpp>
6 #include <curlpp/Options.hpp>
7 #include <fstream>
8
9 using namespace curlpp::options;
10
11 int main(int, char **)
12 {
13     try
14     {
15         curlpp::Cleanup testCleanup;
16         curlpp::Easy miRequest;
17         miRequest.setOpt<Url>("http://www.wikipedia.org");
18         miRequest.perform();
19     }
20     catch(curlpp::RuntimeError & e)
21     {
22         std::cout << e.what() << std::endl;
23     }
24     catch(curlpp::LogicError & e)
25     {
26         std::cout << e.what() << std::endl;
27     }
28
29     return 0;
30 }

Я использую macOS Sierra 10.12.4 с установленными средствами командной строки Xcode и homebrew. Я доморощенный библиотека curlpp. Я знаю, что кто-то еще смог скомпилировать этот проект в Ubuntu 16.04 с помощью gcc, поэтому я думаю, что проблема связана с macOS.

Я совершенно новичок в cpp, поэтому любая помощь будет принята с благодарностью!

1

Решение

Вы должны указать компилятору, какие библиотеки связать с вашим исполняемым файлом. В вашем случае проблема решается добавлением опций -lcurlpp -lcurl,

Кстати, указанный вами путь неверен, поскольку заголовки фактически находятся в / usr / local / Cellar / curlpp / [вставить версию здесь] / include. В любом случае, это прекрасно компилируется без добавления пути поиска для библиотек, установленных через homebrew, так как он автоматически создает символические ссылки в / USR / местные / включить, который является одним из мест по умолчанию для поиска компилятором.

1

Другие решения

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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector