2013-03-27 51 views
2

我没有使用C++的经验,只需要对C++应用程序做一个小的调整就可以执行HTTP请求来验证用户。在使用CMake的项目中链接卷曲

Curlpp是一种选择,但包括库时,我得到一个错误的建筑:

Undefined symbols for architecture x86_64: 
    "curlpp::OptionBase::OptionBase(CURLoption)", referenced from: 
     app_idomsconnector::RTMPAppProtocolHandler::GetAuthPassword(std::string) in libidomsconnector.a(rtmpappprotocolhandler.cpp.o) 
     curlpp::OptionTrait<std::string, (CURLoption)10002>::clone() const in libidomsconnector.a(rtmpappprotocolhandler.cpp.o) 

据我了解,我需要添加/中的CMakeLists.txt文件链接库。任何人都可以告诉我究竟需要添加什么? (运行OSX 10.8)正如我所提到的,我没有使用C++的经验,因为我大部分时间都在使用Java。

+0

你有没有建立正确的库? (64位) - 'x86_64体系结构的未定义符号' – Caribou 2013-03-27 11:47:30

+0

可能没有,使用“port”安装curl,但是会认为是Mac的x86_64。我必须从头开始构建它吗? – 2013-03-27 11:53:27

+0

我不是Mac精通的,我只是强调curlpp错误,因为你说你不习惯使用C++,有时候人们会错过关键位。如果安装正确,原因可能是库路径或名称。对不起,我无法提供更多帮助。 – Caribou 2013-03-27 11:59:52

回答

7

据我所知,我需要在CMAKELists.txt文件中添加/链接库。

正是你需要做的:)

在C++中,有两种类型的文件时,包括图书馆到项目的内容:

  • 头文件,其中声明符号的名称(如单词列表)
  • 代码所在的目标文件(如字典实际定义的字典)

(这是有点简化,但这里并不重要)

错误消息告诉你,你不提供对象文件给编译器,所以它不知道什么字(类和函数)你在你的项目中使用的意思。

如果你正在建设一个名为 “MyExecutable” 的执行,你必须有一个像

add_executable(MyExecutable ...)

在你的CMakeLists.txt

线。

这一行后,尝试添加

target_link_libraries(MyExecutable curlpp)

我你已经有了一个 “MyExecutable” 一target_link_libraries线,只需添加curlpp别人库。

+0

好吧,那很简单!万分感谢,本来可以救我一天! – 2013-03-27 19:17:15

+0

嗨。在我的Mac OS上,我下载了curl,进入了它的主文件夹并运行了./configure,make和make install。一切似乎都正常工作。 现在,我需要将curl链接到我的项目。按照您的说法修改CMakeLists,但编译器无法找到curl的标题。我甚至应该移动一些特定的文件在curl的文件夹(我编译的地方)指定在我的项目中的位置?谢谢 – ubisum 2016-09-30 17:44:25