C++ 架构x86_64(CULLPP)的未定义符号
在我正在进行的项目中,我试图使用curlpp库来发出一个简单的html GET请求。我使用以下选项将cpp文件传递给clang++:C++ 架构x86_64(CULLPP)的未定义符号,c++,gcc,macos-sierra,clang++,curlpp,C++,Gcc,Macos Sierra,Clang++,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 f
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
架构x86_64的未定义符号:
“curlpp::OptionBase::OptionBase(CURLoption)”,引用自:
url_test-541b93.o中的curlpp::Option::Option(curlpoption,std:uu 1::basic_string const&)
“curlpp::OptionBase::~OptionBase()”,引用自:
url_test-541b93.o中的curlpp::Option::Option(curlpoption,std:uu 1::basic_string const&)
url_test-541b93.o中的curlpp::Option::~Option()
“curlpp::UnsetOption::UnsetOption(char const*)”,引用自:
url_test-541b93.o中的curlpp::Option::updateMeToOption(curlpp::OptionBase const&)
url_test-541b93.o中的curlpp::OptionTrait::updateHandleToMe(curlpp::internal::CurlHandle*)常量
url_test-541b93.o中的curlpp::Option::getValue()常量
“curlpp::RuntimeError::~RuntimeError()”,引用自:
url_test-541b93.o中的curlpp::UnsetOption::~UnsetOption()
“curlpp::libcurlRuntimeAssert(char const*,CURLcode)”,引用自:
url_test-541b93.o中的void curlpp::internal::CurlHandle::option(CURLoption,void*)
“curlpp::Easy::perform()”,引用自:
_url_test-541b93.o中的主要内容
“curlpp::Easy::Easy()”,引用自:
_url_test-541b93.o中的主要内容
“curlpp::Easy::~Easy()”,引用自:
_url_test-541b93.o中的主要内容
“curlpp::Cleanup::Cleanup()”,引用自:
_url_test-541b93.o中的主要内容
“curlpp::Cleanup::~Cleanup()”,引用自:
_url_test-541b93.o中的主要内容
“curlpp::OptionBase::operator您的问题是您没有链接您使用的库。添加库应该很好。您必须告诉编译器哪些库要链接到您的可执行文件。在您的情况下,可以通过添加选项
-lcurlpp-lcurl
来解决此问题。”
顺便说一句,您提供的路径不正确,因为头文件实际上位于/usr/local/ceral/curlpp/[insert version here]/include.Anyways,对于通过自制安装的库,它可以很好地编译而不添加include搜索路径,因为它会自动在/usr/local/include中创建符号链接,这是编译器搜索的默认位置之一。谢谢,如果我尝试
clang++-std=c++-11-stdlib=libc++-lcurlpp-lcurl
我会得到以下结果:url_test.cpp:4:10:致命错误:未找到“curlpp/curlpp.hpp”文件
-有什么建议吗?好的,我最终通过卸载然后重新安装和重新链接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 }